我正在尝试编译beej的网络编程示例指南,但是Windows XP没有这样的功能。我正在使用 mingw,如果有什么区别的话。
来自WinSock层:
WSAAddressToString
(ntop)WSAStringToAddress
(普顿)Windows 的 POSIX 兼容 libc (PlibC)
库中还有
inet_ntop
函数,该库是为将 POSIX 应用程序移植到 Windows 而创建的。 在线文档中没有关于它的注释,但它至少自 2008 年以来就存在于文件 inet_ntop.c
中(根据文件日期)。
const char * inet_ntop(int af, const void *src, char *dst, size_t size)
const char *inet_ntop(int af, const void *src, char *dst, socklen_t cnt)
{
if (af == AF_INET)
{
struct sockaddr_in in;
memset(&in, 0, sizeof(in));
in.sin_family = AF_INET;
memcpy(&in.sin_addr, src, sizeof(struct in_addr));
getnameinfo((struct sockaddr *)&in, sizeof(struct
sockaddr_in), dst, cnt, NULL, 0, NI_NUMERICHOST);
return dst;
}
else if (af == AF_INET6)
{
struct sockaddr_in6 in;
memset(&in, 0, sizeof(in));
in.sin6_family = AF_INET6;
memcpy(&in.sin6_addr, src, sizeof(struct in_addr6));
getnameinfo((struct sockaddr *)&in, sizeof(struct
sockaddr_in6), dst, cnt, NULL, 0, NI_NUMERICHOST);
return dst;
}
return NULL;
}
#include <winsock2.h>
#include <windows.h>
#include <ws2tcpip.h>
链接
gcc showip.c -lws2_32
目标:x86_64-w64-mingw32 线程模型:win32 gcc 版本 6.3.0 (GCC)
QString ipv4ToString(const in_addr& addr) {
char ipstr[INET_ADDRSTRLEN];
unsigned char* bytes = (unsigned char*)&addr;
_snprintf(ipstr, INET_ADDRSTRLEN, "%u.%u.%u.%u", bytes[0], bytes[1], bytes[2], bytes[3]);
return QString::fromLocal8Bit(ipstr);
}