Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
969 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Pb avec les sockets: fonction bind

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Pb avec les sockets: fonction bind

n°1149889
zied3
Posté le 14-07-2005 à 12:15:27  profilanswer
 

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" );
}

mood
Publicité
Posté le 14-07-2005 à 12:15:27  profilanswer
 

n°1149927
manatane
En vous remerciant, bonsoir
Posté le 14-07-2005 à 12:39:08  profilanswer
 

zied3 a écrit :

Bonjour
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)
...
}


tu testes le retour dans une variable mais tu t'en sers pas. regardes les conditions d'erreurs genre  

Code :
  1. if( bind(l_i_sd,(struct sockaddr_in *)&l_s_socketAddress, sizeof(struct sockaddr_in)) < 0) {
  2.   perror("bind" );
  3.   ...
  4. }


là tu auras ton erreur
 
et pour du udp il me semble que tu n'as pas besoin de bind()...

n°1149948
zied3
Posté le 14-07-2005 à 13:12:55  profilanswer
 

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

n°1149975
manatane
En vous remerciant, bonsoir
Posté le 14-07-2005 à 13:53:36  profilanswer
 

(sous linux) coté client le noyau affecte une adresse correcte lorsqu'on rentre en communication avec un autre processus

n°1150285
Sve@r
Posté le 14-07-2005 à 20:13:47  profilanswer
 

zied3 a écrit :

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" );
}


 
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"


Message édité par Sve@r le 15-07-2005 à 14:58:42

---------------
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
n°1150518
blackgodde​ss
vive le troll !
Posté le 15-07-2005 à 10:38:21  profilanswer
 

puis tu peux pas "binder" 2 sockets sur le meme port me semble


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Pb avec les sockets: fonction bind

 

Sujets relatifs
[Javascript] Petit problème de fonctionDetection de la fin d'une fonction ?
Formulaire en fonction d'un autre formulaire[PHP] récupérer une variable dans une fonction
requete SQL dans fonction JS[pdf] automatiser une fonction print
[php] Fonction mail, erreur incompréhensible [Résolu]Fonction qui récup tous les paramètres d'une méthode ?
[VBA EXCEL] fonction très simple qui renvoie #VALEUR...Problème fonction php: Undefined variable
Plus de sujets relatifs à : Pb avec les sockets: fonction bind


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR