wie findet man einen socket die ip-Adresse in c++/c
Ich will wissen, wie man die IP-Adresse eines Clients, der eine Verbindung zu einem socket auf einem server mit übernehmen. Wie kann ich dies tun? getpeername liefert eine falsche IP-Adresse, und ich kann nicht scheinen zu finden ein anderer Weg, es zu tun.
Auf dem server, nach accept gibt, ich bin dabei:
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;
- Bitte zeigen Sie uns einige Ihrer code.
- buf ist kein string
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den 2. parameter akzeptieren, hat diese Informationen.
Haben Sie mehrere Fehler:
struct sockaddr
. Stattdessen sollten Sie mit Hilfestruct sockaddr_in
oderstruct sockaddr_in6
je nach Typ der Steckdose;getpeername()
für Fehler.struct in_addr
oderstruct in6_addr
zuinet_ntop()
, nicht ein Zeiger auf eine sockaddr.Sollte es so Aussehen:
Brauchen Sie nicht zu verwenden
getpeername()
, obwohl, können Sie stattdessen passieren(struct sockaddr *)&name
und&len
als zweiten und Dritten Parameter vonaccept()
und gehen von dort aus.Wilde Vermutung, basierend auf den begrenzten Informationen, die derzeit zur Verfügung: Stellen Sie sicher, dass Sie anrufen
getpeername()
bei dem angenommenen Zusammenhang, der nicht auf den socket.Wenn
getpeername()
gibt, es zu schreiben, was wahrscheinlich zu einemin_addr_t
(oderin6_addr
!) Struktur. Verwenden Sie eine routine wieinet_ntoa
zu formatieren und das Ergebnis anzeigen.