Probléme Socket - C - Programmation
Marsh Posté le 08-04-2009 à 16:01:02
Au lieu de :
if(bind(sin_serv,&sin_serv,sizeof(sin_serv))<0) |
Essayer :
if(bind(sock_serv,&sin_serv,sizeof(sin_serv))<0) |
Marsh Posté le 08-04-2009 à 17:06:23
Merci olivhill mais le probléme reste tjr le meme, voici le nouveau:
Code :
|
pourquoi sa ne marche pas?!
Marsh Posté le 08-04-2009 à 17:20:35
Est-ce que le message reste exactement le même (bind:Socket operation on non-socket! ) ou bien est-ce que le programme va un peu plus loin ?
J'ai un programme un peu similiare, mais au lieu de
sin_serv.sin_addr.s_addr=INADDR_ANY; |
j'ai
sin_serv.sin_addr.s_addr = inet_addr(ip_addr); // e.g. inet_addr("123.10.20.30" ) |
Et plus bas, la ligne du recvfrom ne me semble pas correcte. J'essayerais plutôt :
n=recvfrom(sock_serv,line,sizeof(line),0,(struct sockaddr *)&sin_clien,&size_sin_clien);
Marsh Posté le 08-04-2009 à 22:59:30
non non le programme et comme sa mais il m'affiche toujours la meme chose !
Marsh Posté le 09-04-2009 à 09:25:49
Peut-être que la modification n'a pas été prise en compte. Il faudrait mettre des traces pour voir si c'est la nouvelle version qui tourne. Et peut-être qu'au lieu d'écouter sur toutes les adresses, il faudrait écouter sur une adresse particulière, au moins pour réussir à faire tourner une première version.
Marsh Posté le 10-04-2009 à 17:06:43
Ton problème viens de cette ligne:
Code :
|
tu utilises une affectation et une comparaison dans la même condition du if donc il faut entourer ton affectation par des parenthaises comme suite:
Code :
|
ça devrait régler ton problème au niveau du bind.
Au passage, quelque remarques à part:
- Pour la fonction main en langage C, on retourne 0 quand c'est succès, et dans le cas d'échec on retourne 1, et non pas le contraire comme tu as fait dans ton code.
- Au niveau du recvfrom, utilise sizeof(line) pas strlen(line). recvfrom ne peut pas connaitre strlen(line) avant de recevoir line ...
- En mode texte, le '\0' de fin de chaine n'est pas transmis, il faut le faire donc: line[n] = 0; et au niveau de recvfrom tu dois prévoir de la place pour ce caractère (le 0), donc sizeof(line)-1
à lire absolument: http://mapage.noos.fr/emdel/reseaux.htm
---------------
JMCT
Marsh Posté le 10-04-2009 à 22:04:53
ReplyMarsh Posté le 10-04-2009 à 22:09:57
man_u a écrit : Oui ça marche ! Merci tomap et olivthill ! |
De rien.
man_u a écrit : tomap sa ve dire quoi JMCT? lol |
<HS>
ça veux dire "Je M'en Carre Totalement" (google pour plus d'infos..), c'est pour que tu me reconnaisse, parce que je t'ai reconnu moi
</HS>
Marsh Posté le 08-04-2009 à 14:01:13
Bonjour a tous,
voici mon petit programme Serveur UDP:
sous windows: aucune erreur et il s'éxécute trés bien.
sous Linux(Ubuntu): aucune erreur MAIS lorsque je l'exécute il m'affiche une erreur: bind:Socket operation on non-socket! pourquoi cette erreur? et sa veux dire quoi? Merci
Message édité par man_u le 08-04-2009 à 14:02:54