【问题标题】:Getting my own IP address using getsockname() [duplicate]使用getsockname()获取我自己的IP地址[重复]
【发布时间】:2014-09-18 07:22:07
【问题描述】:
我试图通过使用UDP 套接字连接()到 8.8.8.8,然后调用getsockname() 函数来获取我自己的 IP 地址。
我写了一个函数get_my_ip(),当它被放到我的服务器程序中时代码可以工作,但是作为一个单独的函数,它失败了。它会打印一些奇怪的字符而不是我的 IP 地址。
我对服务器程序中代码的唯一更改是返回 NULL 而不是返回 1,或者返回 2,因为它在 int main() 内。
谁能看到我的程序为什么不工作?
谢谢。
【问题讨论】:
标签:
c
linux
sockets
unix
udp
【解决方案1】:
您必须初始化 addrlen。
addrlen = sizeof remoteaddr;
getsockname(sockfd, (struct sockaddr*)&remoteaddr, &addrlen);
【解决方案2】:
您必须在您的inet_ntop() 调用中转换sin_addr。应该是这样的:
inet_ntop(AF_INET, &(((struct sockaddr_in *)sa)->sin_addr), remoteIP, addrlen);
inet_ntop(AF_INET6, &(((struct sockaddr_in6 *)sa)->sin6_addr), remoteIP, addrlen);