2009-05-29 40 views
0

我在寫智能設備之間進行通信的簡單程序,當調用gethostbyaddr()時我收到11001。兩臺設備都顯示它們已連接到同一網絡,但從msdn文檔11001錯誤未找到主機。沒有這樣的主機是已知的。有人有任何建議,謝謝?我的代碼如下。gethostbyaddr()有錯誤11001

void InitializeSocket() 
{ 
    WORD socketVersion; 
    WSADATA wsaData; 
    SOCKADDR_IN serverInfo; 
    int returnVal; 
    LPHOSTENT remotHost; 

    socketVersion = MAKEWORD(2,2); 
    WSAStartup(socketVersion, &wsaData); 

    in_addr iaHost; 

    //iaHost.s_addr = inet_addr("120.15.22.14"); 
    iaHost.S_un.S_un_b.s_b1 = 120; 
    iaHost.S_un.S_un_b.s_b2 = 15; 
    iaHost.S_un.S_un_b.s_b3 = 22; 
    iaHost.S_un.S_un_b.s_b4 = 14; 
    remotHost = gethostbyaddr((const char *)&iaHost, sizeof(struct in_addr), 
     AF_INET); 

    if(iaHost.s_addr == INADDR_NONE) 
    { 
     MessageBox(NULL, TEXT("inet_addr has invalid address"), 
      TEXT("inet_addr"), MB_OK); 
     WSACleanup(); 
     closesocket(theSocket); 
     return; 
    } 

 

if(!remotHost) 
    { 
     returnVal = WSAGetLastError(); 
     WSACleanup(); 
     closesocket(theSocket); 
     return; 
    } 

    theSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);  
    if(theSocket == INVALID_SOCKET) 
    { 
     returnVal = WSAGetLastError(); 
     WSACleanup(); 
     closesocket(theSocket); 
     return; 
    } 

    serverInfo.sin_family = AF_INET; 
    serverInfo.sin_addr = *((LPIN_ADDR)*remotHost->h_addr_list); 
    serverInfo.sin_port = htons(8888); 

    //Connect to the server 
    returnVal = connect(theSocket, (LPSOCKADDR)&serverInfo, 
     sizeof(struct sockaddr)); 

    if(returnVal == SOCKET_ERROR) 
    { 
     returnVal = WSAGetLastError(); 
     WSACleanup(); 
     closesocket(theSocket); 
     return; 
    } 
} 

回答

0

錯誤11001是一個通用的DNS查找錯誤,所以我只有一個問題。 DNS中是否存在120.15.22.14地址?

您可以通過在命令行中鍵入

nslookup 120.15.22.14 

發現這一點。

如果出現錯誤,這是因爲DNS不知道這些地址的任何信息,因此gethostbyaddr()將無法​​提供任何信息。

更新:

回答你兩點:

我只是鍵入nslookup 120.15.22.14,但不能找到120.15.22.14它返回。不存在的域。

由於nslookup 120.15.22.14返回錯誤,因此該IP地址的DNS中沒有條目。那是你的問題。

我看着我的設備設置爲DNS,它設置爲120.20.32.10這是不同的120.15.22.14所以這意味着我沒有配置DNS?

如果120.20.32.10是什麼在您的設備的DNS和120.15.22.14是實際的地址,那麼DNS是錯誤的。乾淨利落。修復DNS。

如果我使用gethostbyname()而不是gethostbyaddr(),它會產生相同的結果嗎?

如果要將DNS名稱轉換爲IP地址,請使用gethostbyname()。要將IP地址轉換爲DNS名稱,請使用gethostbyaddr()

對於連接到遠程主機,您通常會使用gethostbyname()調用,因爲主機的IP地址可能隨時更改。如果DNS始終準確地表示該主機的IP地址,則這是首選方式。

+0

感謝您的解釋,因爲我不瞭解網絡編程,所以它非常有幫助。 – Bopha 2009-05-29 20:28:48

0

我只是鍵入nslookup 120.15.22.14,但它返回作爲不能找到120.15.22.14。不存在的域。

我看着我的DNS設備設置,它設置爲120.20.32.10,這與120.15.22.14不同,所以這意味着我沒有配置DNS?

+0

@Bopha,這些應該作爲評論你正在問的答案。這樣(1)回答者將被通知。 (2)你不會把SO變成會話公告板。看到我更新的答案。 – paxdiablo 2009-05-29 02:20:15