Pb avec les sockets: fonction bind - C - Programmation
Marsh Posté le 14-07-2005 à 12:39:08
zied3 a écrit : Bonjour |
tu testes le retour dans une variable mais tu t'en sers pas. regardes les conditions d'erreurs genre
Code :
|
là tu auras ton erreur
et pour du udp il me semble que tu n'as pas besoin de bind()...
Marsh Posté le 14-07-2005 à 13:12:55
Non en fait j ai enlevé le bout de code ou je testais sur la valeur (pour faciliet la lisibilité).
T'es sur que pour UDP t'as pas besoin de bind?
je viens de regarder un exemple de C/S sous VC++, le bind retourne -1 mais même avec ça il envoie le message.
Moi j'utilise un compilateur ARM (pour l'embarqué) je ne sais pas si tu connais, mais en tout cas ça donne pas le même resultat
Marsh Posté le 14-07-2005 à 13:53:36
(sous linux) coté client le noyau affecte une adresse correcte lorsqu'on rentre en communication avec un autre processus
Marsh Posté le 14-07-2005 à 20:13:47
zied3 a écrit : Bonjour, |
Que ce soit en TCP ou en UDP La fonction "bind" n'est pas à appeler pour le client (mais il la faut sur le serveur)
Tu trouveras un cours complet de programmation socket à l'adresse suivante: http://fr.lang.free.fr/cours/SocketCsyst_v1.0.pdf
Petit détail: Quand tu envoies "test send UDP", n'oublie pas d'envoyer le '\0' final pour que ton serveur qui lit la socket récupère ce caractère et puisse gérer ce qu'il reçoit comme "chaine de caractères" => remplace le "13" par "14" dans "sendto"
Marsh Posté le 15-07-2005 à 10:38:21
puis tu peux pas "binder" 2 sockets sur le meme port me semble
Marsh Posté le 14-07-2005 à 12:15:27
Bonjour,
Je développe une application en C standard sur une architecture C/S; J'essaie d'utiliser les sockets pour communiquer avec le servuer (qui est déjà implémenté, j'essaie mtn d'implémentr le client, le serveur tourne pour l'instant sur la même machine ).
D après la doc, la focntion bind doit retourner 0, sinon il y a erreur. Dans mon cas à chaque fois le bind me retourne -1 et quand j essaie d envoyer un message UDP au serveur ça ne marche pas.
Voici un bout de code
SOCKET l_i_sd;
struct sockaddr_in l_s_socketAddress;
l_i_sd =(SOCKET)socket(AF_INET, SOCK_DGRAM, 0);
l_s_socketAddress.sin_family = AF_INET;
l_s_socketAddress.sin_port = htons((unsigned short)port); //numéro de port:le même que
//celui du serveur
l_s_socketAddress.sin_addr.s_addr =inet_addr("10.0.0.1" );
int k = bind(l_i_sd,(struct sockaddr_in *)&l_s_socketAddress, sizeof(struct sockaddr_in));
//envoi du message UDP
if(sendto(l_i_sd, "test send UDP", 13, 0, (struct sockaddr_in *)&l_s_socketAddress, sizeof(struct sockaddr_in))<0)
{
printf"Send UDP KO" );
}
else
{
printf(" Send UDP OK" );
}