プログラムが起動されているコンピューターの IP アドレスを取得して、それをクライアントに送信できるようにしたいのですが、実際の IP アドレスではなく常に 0.0.0.1 を取得します (たとえば、127.0.0.1 など)。
現在、ポートは取得できますが、IP アドレスは取得できません。
どうすれば入手できますか?
最善の解決策は、 で取得できることsockaddr_in
です。これが私が現在行っていることです:
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);
}
編集:私は自分の考え方で間違った方向に進んでいたことを理解しています。私の質問は次のとおりです。自分の IP アドレスを取得する最善の方法は何ですか?