Socket (getpeername)

petitchech Messages postés 114 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 28 juin 2004 - 10 nov. 2003 à 18:02
petitchech Messages postés 114 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 28 juin 2004 - 10 nov. 2003 à 18:58
Bonjour,

Quand je fai sa sa me fai getpeername < 0 et sa me donne pas l'host de selui qui se connect ni son ip et port.
Esque quelqu'on peut m'aider ?

if(getpeername(server,(struct sockaddr*) &adresse,&taille) < 0)
printf("\n Erreur sur getpeername... %d \n",errno);

hp_dist = gethostbyaddr((char *)&adresse.sin_addr, sizeof(struct in_addr), AF_INET);

printf("Host client : %s Ip client : %s Port %d ", hp_dist->h_name, inet_ntoa(adresse.sin_addr), ntohs(adresse.sin_port));

12 réponses

cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
10 nov. 2003 à 18:08
Salut,
taille doit etre a sizeof(sockaddr) avant d'appeller getpeername(...).
Sinon met un WSAGetLastError() juste apres l'erreur histoire d'etre plus renseigné.
0
petitchech Messages postés 114 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 28 juin 2004
10 nov. 2003 à 18:19
Salut,

Il me di que getpeername est = -858993460
et errno est egale a 0.
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
10 nov. 2003 à 18:23
Salut,
-858993460 ?
Normalement c'est 0 ou -1.
Met un WSAGetLastError() a la place du errno.
0
petitchech Messages postés 114 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 28 juin 2004
10 nov. 2003 à 18:32
int taille=sizeof(adresse);

int oo = getpeername(server,(struct sockaddr*) &adresse,&taille);

if(oo < 0)
printf("\n Erreur sur getpeername... \n");

hp_dist = gethostbyaddr((char *)&adresse.sin_addr, sizeof(struct in_addr), AF_INET);

printf("Host client : %s Ip client : %s Port %d ", hp_dist->h_name, inet_ntoa(adresse.sin_addr), ntohs(adresse.sin_port));

je le mes ou le WSAGetLastError() ??
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
10 nov. 2003 à 18:35
Salut,
printf("\n Erreur sur getpeername: %d\n", WSAGetLastError());
0
petitchech Messages postés 114 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 28 juin 2004
10 nov. 2003 à 18:37
sa me di 10057.
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
10 nov. 2003 à 18:40
Salut,
Erreur 10057: WSAENOTCONN
"Une requête d'envoi ou de réception de données n'a pas été autorisée car le socket n'est pas connecté et (lors de l'envoi sur un socket datagramme en utilisant un appel sendto) aucune adresse n'a été fournie."

Bien evidement si ton socket n'est pas connecté tu n'aura jamais l'ip de la machine distance.. puisqu'elle n'est pas connectée.
0
petitchech Messages postés 114 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 28 juin 2004
10 nov. 2003 à 18:43
Pourtan je me connect sur le server avec telnet et je peu envoiller des msg ou ses au client d'utiliser cette fonction ?
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
10 nov. 2003 à 18:47
Salut,
Client ou Serveur peut importe, a partir d'un socket connecté getpeername te donne l'ip et le port de la machine distante, c'est tout.
C'est quoi exactement que tu veux faire ? (précisement)
0
petitchech Messages postés 114 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 28 juin 2004
10 nov. 2003 à 18:49
Je veu avoir l'ip et l'host de selui qui se connect.
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
10 nov. 2003 à 18:55
Salut,
Heuresement que j'ai dit "précisement" :p

Tu est le serveur donc.
Il faut placer getpeername(...) apres accept(...), cad une fois que le socket est connecté.

Autre methode: accept(...) rempli aussi une structure sockaddr avec l'ip et le port du client qui vient de se connecter. Ca serait ptet plus simple de prendre les infos ici.

Si ca va toujours pas, met tout le code, ou alors essaye d'etre plus precis.
0
petitchech Messages postés 114 Date d'inscription lundi 17 février 2003 Statut Membre Dernière intervention 28 juin 2004
10 nov. 2003 à 18:58
A merci ses bon je v le prendre directement ds accept.

Merci de ton aide.
0
Rejoignez-nous