OVH Cloud OVH Cloud

[WD9] Utilisation d'un Buffer avec les sockets

12 réponses
Avatar
Sylvain
Bonjour tout le monde,
Actuellement je travail avec les sockets pour un transfert de fichier client
à client pour une de nos applications, je voudrais transmettre des
structures par le biais des sockets donc j'utilise transfert pour remplir
mon buffer

Transfert(&Buffer,&TrameListFile,Dimension (TrameListFile))
Avant celà j'initialise mon Buffer avec : Buffer=Répète(" ",Dimension
(TrameListFile))

Lorsque j'envoie sur mon socket avec SocketEcrit("Client",Buffer) j'ai une
erreur Access violation (GPF).

J'utilise le mode de transmission par defaut, si je stock une chaine dans le
buffer ça passe sans problème.

Voilà un exemple de structure utilisé:

TTrameListFile est une structure
TailledeLaTrame est un entier
TypedeTrame est un entier=1
Nomdefichier est une chaîne ASCIIZ sur 255
Hach est une chaîne ASCIIZ sur 22
Taille est un entier
FIN

Je suppose que je m'y prend mal c'est la première fois que j'utilise les
socket sous windev (je pense que çelà vient de ma façon de remplir mon
buffer)

Donc si quelqu'un à une solution je suis ouvert à toute proposition.

Cordialement
Sylvain L.

2 réponses

1 2
Avatar
Franck
Sylvain a formulé ce lundi :

Pour ce qui est de l'initialisation octet par octet si je pouvais m'en passer
ce serais pas mal car je vais avoir une trentaine de trames et il faudrais
que je le fasse coté client et coté serveur bref c'est pas terrible mais je
garde cette solution dans le pire des cas.



Si la structure n'est pas acceptée, je ne pense pas que tu ai d'autres
solutions :-(
Si tu en trouves une, fais-le moi savoir, ca peut être utile ;-)

A+

--
Ceci est une signature automatique de MesNews.
Site : http://www.mesnews.net
Avatar
Sylvain
Et voici la solution non sans mal ^^
On laisse tomber le buffer et on passe tout par une chaine en binaire...

Ch est une chaine
Ch=Répète(" ",Dimension(TrameListFile)) // je réserve au cas où vu que je ne
sais pas ce que fait exactement transfert
Transfert(&Ch,&TrameListFile,Dimension(TrameListFile))
SocketEcrit("Client",Ch)


de l'autre coté:
sMessage = SocketLit(sNomConnexion,Faux,2000)
Transfert(&Trame,&sMessage,Dimension(Trame))
Info(Trame:TypedeTrame,Trame:Nomdefichier,Trame:Hach,Trame:Taille )

Et voilà je réceptionne belle et bien ma trame correctement :)

Cordialement
Sylvain L.
1 2