我在C中使用套接字编程API。在TCP客户端程序中,我使用bind(),然后使用getsockname()(在调用connect()之前)获取本地计算机的IP地址和端口号。但是,我只能获得正确的端口号,而获得错误的IP地址(零)。

所以我问(在调用connect()之前)是否有任何方法可以正确获取本地计算机的正确IP地址?

最佳答案

一种可移植的方法是先调用gethostname(),然后再调用gethostbyname()。

IE。

char hostname[256], ipaddress[256];
if (gethostname(hostname, sizeof(hostname)) != SOCKET_ERROR) {
    struct hostent *phe = gethostbyname(hostname);
    if (phe != NULL && phe->h_addr_list[0] != NULL) {
        struct in_addr addr;
        memcpy(&addr, phe->h_addr_list[0], sizeof(struct in_addr));
        strcpy(ipaddress, inet_ntoa(addr));
    }
}

关于c++ - 在C中使用bind()时获得错误的IP地址,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8728852/

10-12 16:15