Wie man seine eigene IP-Adresse mit einer socket-Adresse?

Möchte ich, um die IP-Adresse des Computers, mein Programm gestartet wird, fähig zu sein, dann senden Sie es an einen client, aber ich bekomme immer 0.0.0.1 statt der realen IP-Adresse (wie 127.0.0.1 zum Beispiel).

Ich bin derzeit in der Lage, um den port, nicht aber die IP-Adresse.

Wie ich es bekommen kann?

Die beste Lösung wäre, um der Lage sein, um es mit einem sockaddr_in. Hier ist, was ich bin derzeit dabei:

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 verstehen, ich war das gehen auf dem falschen Weg mit meiner Art zu denken. Also meine Frage ist: Was ist der beste Weg, um Ihre eigene IP-Adresse?

  • Wenn der client, mit dir zu reden... er hat schon Ihre ip-Adresse. Ich bin verwirrt, warum Sie benötigen, senden Sie es explizit.
  • Ich mache einen FTP-server und bei der Eingabe der passive Modus, muss ich zum senden der IP-Adresse und der port über den der server läuft... Auch wenn es die gleiche IP-Adresse...
  • Vielleicht diese alte Frage? stackoverflow.com/questions/212528/... ich denke, bind to 0.0.0.0 ist eine spezielle Sache, obwohl, was bedeutet, dass das binden an alle IP - Adressen- ich bezweifle, Sie würden sich etwas anderes aus binden, denn das ist, was Sie übergeben.
  • Tatsächlich können Sie immer noch verwenden getsockname() aber rufen Sie es auf die Buchse für die Verbindung mit dem client, nicht der sockel für die Bindung. Das wird Ihnen zeigen, welche Ihrer Schnittstellen, die client spricht, was ich davon ausgehen, werden die gleichen sein, Sie müssen verwenden Sie für die Hilfs-Daten-Verbindung.
  • Ok, und dann bekommen Sie die ip-Adresse für diese Schnittstelle mit ioctl? Kannst du es als Antwort, damit ich überprüfen kann? Danke.
  • Als ähnliche Frage hier: stackoverflow.com/q/10956890/694576

Schreibe einen Kommentar