我试图通过尝试使用UDP
套接字连接()到8.8.8.8然后调用getsockname()
函数来获取自己的IP地址。
我编写了一个函数get_my_ip()
,代码在放入我的服务器程序时有效,但作为一个单独的函数,它失败了。它打印一些奇怪的字符而不是我的IP地址。
我从服务器程序中的代码中唯一改变的是返回NULL而不是返回1,或返回2,因为它位于int main()
内。
有人能看出为什么我的程序无效吗?
谢谢。
答案 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);