comment trouver un socket adresse ip du c++/c
Je veux savoir comment faire pour obtenir l'adresse IP d'un client qui se connecte à une prise sur un serveur à l'aide de l'accepter. Comment puis-je faire? getpeername renvoie une adresse IP incorrecte, et je n'arrive pas à trouver un autre moyen de le faire.
Sur le serveur, après avoir accepter les retours, je suis en train de faire ceci:
char buf[INET_ADDRSTRLEN];
struct sockaddr name; socklen_t len = sizeof(name);
getpeername(sock_fd, &name, &len); //sock_fd is the socket im using
inet_ntop(AF_INET, &name, buf, INET_ADDRSTRLEN);
string ip = buf;
- Merci de nous montrer certaines de votre code.
- buf n'est pas une chaîne
Vous devez vous connecter pour publier un commentaire.
Le 2e paramètre de a accepter cette information.
Vous avez plusieurs erreurs:
struct sockaddr
. Au lieu de cela, vous devriez être en utilisantstruct sockaddr_in
oustruct sockaddr_in6
selon le type de la prise de courant;getpeername()
pour les erreurs.struct in_addr
oustruct in6_addr
àinet_ntop()
, pas un pointeur vers une structure sockaddr.Il devrait ressembler à:
Vous n'avez pas besoin d'utiliser
getpeername()
, que vous pouvez au lieu de passer(struct sockaddr *)&name
et&len
que les deuxième et troisième paramètres deaccept()
et de procéder à partir de là.Sauvage suppose que, sur la base des informations actuellement disponibles: assurez-vous que vous appelez
getpeername()
sur la accepté de connexion, pas sur la socket d'écoute.Quand
getpeername()
retourne, il est écrit à ce qui est probablement va être unein_addr_t
(ouin6_addr
!) structure. Utiliser une routine commeinet_ntoa
pour formater et afficher le résultat.