Socket (getpeername)

Signaler
Messages postés
114
Date d'inscription
lundi 17 février 2003
Statut
Membre
Dernière intervention
28 juin 2004
-
Messages postés
114
Date d'inscription
lundi 17 février 2003
Statut
Membre
Dernière intervention
28 juin 2004
-
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));
A voir également:
  • Getpeername
  • Getpeername c++ - Meilleures réponses
  • Socket_getpeername - Meilleures réponses
  • Getpeername() - Forum - C

12 réponses

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

Salut,

Il me di que getpeername est = -858993460
et errno est egale a 0.
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
2
Salut,
-858993460 ?
Normalement c'est 0 ou -1.
Met un WSAGetLastError() a la place du errno.
Messages postés
114
Date d'inscription
lundi 17 février 2003
Statut
Membre
Dernière intervention
28 juin 2004

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() ??
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
2
Salut,
printf("\n Erreur sur getpeername: %d\n", WSAGetLastError());
Messages postés
114
Date d'inscription
lundi 17 février 2003
Statut
Membre
Dernière intervention
28 juin 2004

sa me di 10057.
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
2
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.
Messages postés
114
Date d'inscription
lundi 17 février 2003
Statut
Membre
Dernière intervention
28 juin 2004

Pourtan je me connect sur le server avec telnet et je peu envoiller des msg ou ses au client d'utiliser cette fonction ?
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
2
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)
Messages postés
114
Date d'inscription
lundi 17 février 2003
Statut
Membre
Dernière intervention
28 juin 2004

Je veu avoir l'ip et l'host de selui qui se connect.
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
2
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.
Messages postés
114
Date d'inscription
lundi 17 février 2003
Statut
Membre
Dernière intervention
28 juin 2004

A merci ses bon je v le prendre directement ds accept.

Merci de ton aide.