OVH Cloud OVH Cloud

un probleme avec CAsyncSocket

2 réponses
Avatar
sebastien.brejotbarsacq
bonjour,
je developpe une appli Client/Server sous win98 se et Visual C++ 6.0.
je dois faire du transfert de fichier (de taille variable 500Kb a
50Mb+).
j'ai decide d'utiliser les sockets asynchrones (class CAsyncSocket).
le transfert de fichiers se fait par packets de taille fixe (0x1000
bytes).
pour chaque packets, j'ai une petite entete utile (numero packet
transmis, crc, ...).
j'utilise la fonction Send() de CAsyncSocket pour la transmission. A
reception de l'error WSAEWOULDBLOCK, je pose mes donnees dans une
file.
la creation de la socket est faite pour default (... | FD_WRITE |
...), ainsi
des que la socket est dispo en ecriture, l'appel a la fonction
OnSend() est
effectue, et je transmets les elements de la file.

le probleme: les packets recus par le serveur sont dans le desordre,
pourquoi???

merci pour vos reponses.

2 réponses

Avatar
jmr
"seb" a écrit dans le message de
news:
bonjour,
je developpe une appli Client/Server sous win98 se et Visual C++ 6.0.
je dois faire du transfert de fichier (de taille variable 500Kb a
50Mb+).
j'ai decide d'utiliser les sockets asynchrones (class CAsyncSocket).
le transfert de fichiers se fait par packets de taille fixe (0x1000
bytes).
pour chaque packets, j'ai une petite entete utile (numero packet
transmis, crc, ...).
j'utilise la fonction Send() de CAsyncSocket pour la transmission. A
reception de l'error WSAEWOULDBLOCK, je pose mes donnees dans une
file.
la creation de la socket est faite pour default (... | FD_WRITE |
...), ainsi
des que la socket est dispo en ecriture, l'appel a la fonction
OnSend() est
effectue, et je transmets les elements de la file.

le probleme: les packets recus par le serveur sont dans le desordre,
pourquoi???

merci pour vos reponses.





Socket en SOCK_DGRAM ou en SOCK_STREAM ?

Vu, ce que tu dis, il devrait s'agir de SOCK_DGRAM .. Donc UDP et ce
protocole ne garantie aucunement que les paquets sont recu dans l'ordre
d'émission ...

Jean
Avatar
sebastien.brejotbarsacq
merci jean pour ta reponse.

socket en SOCK_STREAM.
en ce qui concerne la transmission de fichier, je l'envoi par paquets de
0x1000 octets, donc je boucle tant que le fichier ou le mapping n'est pas
envoye entierement.
le probleme c'est que un send n'est pas termine et un autre commence, donc
je mets les donnees dans une FIFO, pour les transmettre dans l'ordre.
alors pourquoi l'aplli distante ne les recoit pas dans le meme ordre ?

.seb.