2010-03-10 297 views
8

我将一些为linux系统编写的代码转换为windows系统。我为我的Windows系统使用C++,并想知道函数inet_aton的等价物。windows等价于inet_aton

回答

8

Windows支持inet_pton,它具有与inet_aton类似的接口(但也适用于IPV6地址)。只需要提供AF_INET作为第一个参数,否则它将像inet_aton一样工作。

(如果您可以更改Linux源代码,inet_pton也可以在那里工作)。

+5

但它只是从Vista和以上。在Windows XP上它将无法加载。 – 2010-08-31 00:41:26

10

这是Windows的等价物,而不是C++等价物,但可能需要inet_addr,我相信它早于inet_aton以及哪些Windows支持。

http://msdn.microsoft.com/en-us/library/ms738563.aspx

该文章还列出,在“又见”一节中,全套的冗长命名的函数来处理IPv6地址等。

+0

一旦我使用inet_addr,并设置有返回值的in_addr结构的S_addr成员,什么是该结构的另外两个工会会员IN_ADDR?我不太确定这些(S_un_b和S_un_w)需要设置为什么。 – SSS 2010-03-10 22:04:29

+0

我假设我可以使用sockaddr结构类型而不是sockaddr_in类型,因此不需要担心S_un_b和S_un_w ....虽然我仍然想知道它们用于什么。谢谢。 – SSS 2010-03-10 22:12:12

+0

我也不知道为什么我忽略了它是一个工会的事实。我想不需要进一步的解释。 – SSS 2010-03-10 22:16:33

1

在Windows XP上运行,你可以试试这个检查:

#pragma comment(lib, "Ws2_32.lib") 

sockaddr_in inaddr; 

#ifdef _WIN32_WINNT 0x0501 
    inaddr.sin_addr.s_addr =inet_addr("10.10.10.10"); //for XP 
#else 
    inet_pton(AF_INET, "10.10.10.10", &inaddr.sin_addr.s_addr); //for Vista or higher 
#endif