【问题标题】: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);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-04-11
        • 2012-01-14
        • 2015-08-05
        • 2013-12-04
        • 1970-01-01
        • 2011-02-08
        • 2013-04-01
        • 2020-04-10
        相关资源
        最近更新 更多