我在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/