在Windows XP中有替代inet_ntop / InetNtop吗?

时间:2009-10-13 16:44:52

标签: c++ windows networking

我正在尝试编译beej的网络编程示例指南,但Windows XP没有这样的功能。我正在使用mingw,如果它有任何区别。

5 个答案:

答案 0 :(得分:9)

来自winsock图层: WSAAddressToString(ntop)和WSAStringToAddress(pton)

答案 1 :(得分:7)

如果您只处理IPv4地址,则可以使用inet_ntoa。它可以在Windows 2000或更高版本上使用。否则你将不得不要求Vista及更高版本,或编写自己的inet_ntop函数。

你也可以看看boost - boost :: asio有一个inet_ntop实现,适用于Windows:boost::asio::detail::socket_ops::inet_ntop。您可以看到源代码here

答案 2 :(得分:3)

POSIX compliant libc for Windows (PlibC)库中还有inet_ntop函数,用于将POSIX应用程序移植到Windows。 online documentation中没有关于它的说明,但至少自2008年以来它存在于文件inet_ntop.c中(根据文件日期)。

const char * inet_ntop(int af, const void *src, char *dst, size_t size)

答案 3 :(得分:1)

你可以在windows 7上使用winsocket和mingw-64

#include <winsock2.h>
#include <windows.h>
#include <ws2tcpip.h>

linkwith

gcc showip.c -lws2_32

目标:x86_64-w64-mingw32 线程模型:win32 gcc版本6.3.0(GCC)

答案 4 :(得分:0)

您可能想使用 Jeroen Massar 提供的内容 here,摘自他的帖子如下:

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;
}