使用getsockname()获取我自己的IP地址

时间:2014-09-18 07:22:08

标签: c linux sockets unix udp

我试图通过尝试使用UDP套接字连接()到8.8.8.8然后调用getsockname()函数来获取自己的IP地址。

我编写了一个函数get_my_ip(),代码在放入我的服务器程序时有效,但作为一个单独的函数,它失败了。它打印一些奇怪的字符而不是我的IP地址。

我从服务器程序中的代码中唯一改变的是返回NULL而不是返回1,或返回2,因为它位于int main()内。

有人能看出为什么我的程序无效吗?

谢谢。

2 个答案:

答案 0 :(得分:3)

您必须初始化addrlen。

addrlen = sizeof remoteaddr;
getsockname(sockfd, (struct sockaddr*)&remoteaddr, &addrlen);

答案 1 :(得分:2)

您必须在sin_addr电话中投放inet_ntop()。它应该是这样的:

inet_ntop(AF_INET, &(((struct sockaddr_in *)sa)->sin_addr), remoteIP, addrlen);

inet_ntop(AF_INET6, &(((struct sockaddr_in6 *)sa)->sin6_addr), remoteIP, addrlen);