2010-03-10 300 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