我想获取启动我的程序的计算机的 IP 地址,以便能够将其发送到客户端,但我总是得到 0.0.0.1 而不是真实的 IP 地址(例如 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 地址的最佳方法是什么?