我想获取程序所在计算机的IP地址,以便将其发送给客户端,但我总是得到0.0.0.1而不是真实的IP地址(例如127.0.0.1)。我目前能够获取端口,但无法获取IP地址。如何获取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地址的最佳方法是什么?
getsockname()
函数,但是在客户端连接的套接字上调用它,而不是在绑定的套接字上调用。这将展示客户端正在使用的接口,我认为这将是他们需要用于辅助数据连接的相同接口。 - Rupioctl
获取此接口的 IP 地址?您能将其发布为答案,以便我可以验证吗?谢谢。 - Julien Fouilhé