Probleme de communication UDP [C/Linux] - C - Programmation
Marsh Posté le 27-09-2006 à 10:23:50
farok a écrit : J'ai un soucis: J'utilise une red hat enterprise 4 et j'essaye de faire un server/client udp. |
Ben oui, c'est à toi de gérer le découpage du bloc. C'est à ça que sert le code retour de sendto()...
Idem en réception, il faudra réassembler le bloc. J'espère que tu as prévu de transmettre la taille ou un délimiteur...
Marsh Posté le 27-09-2006 à 10:39:34
Emmanuel Delahaye a écrit : Ben oui, c'est à toi de gérer le découpage du bloc. C'est à ça que sert le code retour de sendto()... |
Arf zut !
Je pensais que l'on etait limité par la taille d'une trame (64Ko) pas par le systeme !
Il n'y a pas moyen de modifier un paramètre quelque part (systeme ou via une fonction ?)
Marsh Posté le 27-09-2006 à 10:50:08
farok a écrit : Il n'y a pas moyen de modifier un paramètre quelque part (systeme ou via une fonction ?) |
Mauvais reflexe. Le code doit être indépendant du système...
Marsh Posté le 27-09-2006 à 10:59:43
farok a écrit : Arf zut ! |
et bien si justement c'est 65.527o la taille maximale de la charge utile d'un paquet UDP. S'il la taille de ton paquet UDP dépasse la MTU, alors il y a de la fragmentation IP.
Maintenant si tu dis que sur le linux tu ne reçois que 1000o dans l'application, c'est un problème applicatif. Tu devrais regarde les retour de sendto et bien vérifier tout ça.
Marsh Posté le 27-09-2006 à 11:01:48
pour le sendto je veux dire qu'étant donné UDP, si sendto n'a pas envoyé exactement le nombre d'octets demandé, alors il y a un problème. On n'est pas en TCP.
Marsh Posté le 27-09-2006 à 12:23:38
Alors je pense avoir (à moitié) élucidé mon soucis
J'ai defini un define MAX_BUF dans mon application qui etait mise à 65000
hors à l'execution, si je faisais un printf("%d\n",MAX_BUF);
ca me sortais des lignes de 1000
le define était dans un .h externe mais en le changeant par BIG_BUFFER, ca roule maintenant !
Je n'avais aucun warning avec gcc 346
Marsh Posté le 27-09-2006 à 13:46:18
farok a écrit : Alors je pense avoir (à moitié) élucidé mon soucis |
Je suis très étonné qu'il faille bricoler comme ça dans les headers... En principe, sauf indication contraire très explicite, on a pas le doit de modifier les headers.
Marsh Posté le 27-09-2006 à 09:54:23
Salut !
J'ai un soucis: J'utilise une red hat enterprise 4 et j'essaye de faire un server/client udp.
Or lorsque j'envoie un tableau de 64Ko, seul 1000 octets sont envoyé (sendto retourne 1000). Si je compile le meme soft sous cygwin, et bien ca envoie bien 64Ko. Derniere étape: client sous cygwin et serveur sous linux => le client cygwin envoie bien 64Ko mais le serveur sous linux recoit 1000 octets (recvfrom retourne 1000).
Je ne comprends pas trop...
Voici mon code:
Serveur:
Client:
Si quelqu'un peut m'expliquer