Ich möchte die IP-Adresse des Computers erhalten, auf dem mein Programm gestartet wird, um es dann an einen Client senden zu können, aber ich bekomme immer 0.0.0.1 anstelle der realen IP-Adresse (wie zum Beispiel 127.0.0.1) .Wie bekomme ich eine eigene IP-Adresse mit einer Socket-Adresse?
Ich bin derzeit in der Lage, den Port zu bekommen, aber nicht die IP-Adresse.
Wie kann ich es bekommen?
Die beste Lösung wäre es, mit einem sockaddr_in
zu bekommen. Hier ist, was ich gerade tun:
int open_connection(char* ip, int* port)
{
int sock;
struct sockaddr_in sin;
socklen_t len;
int i;
i = 0;
len = sizeof(sin);
if ((sock = socket(AF_INET, SOCK_STREAM, 0)) == -1)
return (-1);
bzero(&sin, sizeof(struct sockaddr_in));
sin.sin_family = AF_INET;
if (bind(sock, (struct sockaddr *) &sin, sizeof(sin)) != 0)
perror("Error on bind");
if (getsockname(sock, (struct sockaddr *)&sin, &len) != 0)
perror("Error on getsockname");
strcpy(ip, inet_ntoa(sin.sin_addr)); // IP = 0.0.0.0
*port = sin.sin_port;
return (sock);
}
EDIT: Ich verstehe, ich war auf dem falschen Weg mit meiner Denkweise gehen. Also meine Frage ist: Was ist der beste Weg, um Ihre eigene IP-Adresse zu bekommen?
Wenn der Client mit Ihnen spricht ... hat er bereits Ihre IP-Adresse. Ich bin verwirrt, warum Sie es explizit senden müssen. – Pyrce
@Pyrce Ich mache einen FTP-Server, und wenn ich den passiven Modus betrete, muss ich die IP-Adresse und den Port senden, den der Server abhört ... Selbst wenn es die gleiche IP-Adresse ist ... –
Vielleicht ist das alt Frage? http://stackoverflow.com/questions/212528/get-the-ip-address-of-the-machine Ich denke, Bindung an 0.0.0.0 ist eine spezielle Sache, obwohl, was bedeutet, an alle IP-Adressen binden - ich bezweifle Sie würde nichts anderes aus der Bindung holen, da das das ist, was Sie übergeben haben. – Rup