Réception de données en UDP

Réception de données en UDP - C - Programmation

Marsh Posté le 28-10-2005 à 18:36:08    

Bonjour, y'a un truc que j'ai pas bien compris avec les sockets en C. Pour faciliter les notations je simplifie déjà les primitives d'envoi/reception de tel sorte que le seul argument qui y figure soit le nombre d'octets que l'on envoie/réceptionne...
 
Quand je fais un sendto(N) à quelqu'un (on est en UDP), pour le recevoir correctement faut il qu'il fasse un receivefrom(N) en un seul coup ?
Ou bien peut-il fait un premier receivefrom(X) avec X < N, faire un traitement, puis un deuxième receivefrom(N-X) ?
 
En fait, ce serait pour pouvoir envoyer des paquets de taille variable. Je met en entete la taille du paquet, le receveur recoie donc d'abord l'entete puis ensuite il sait combien d'octets il doit recevoir...
 
Il y a des risques de pertes de paquets en UDP, existe t'il aussi des risques de perdre un morceau de paquet ?
 
Merci.

Reply

Marsh Posté le 28-10-2005 à 18:36:08   

Reply

Marsh Posté le 28-10-2005 à 18:38:32    

UDP : paquet par paquet. Le paquet que tu reçois en C est intègre. Il y a des risques de ne pas recevoir tous les paquets ou de recevoir des paquets corrompus (détruits).

Reply

Marsh Posté le 28-10-2005 à 18:47:11    

Et donc le système pour recevoir des paquets de tailles variables ne marche pas ?

Reply

Marsh Posté le 28-10-2005 à 18:52:23    

Je tourne le problème dans l'autre sens : si j'essaie de recevoir un paquet de taille N et qu'il m'en arrive un de taille inférieur, est ce que je reste bloqué sur le receivefrom ou bien il me suffit de récupérer la bonne taille (comme on le ferait avec un read) ?

Reply

Marsh Posté le 28-10-2005 à 19:44:13    

la taille des paquets est bornée. Tu reçois un paquet, pas <N octets>. voir la page de man.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed