2009-05-29 7 views
0

私はスマートデバイス間で通信する簡単なプログラムを書いており、gethostbyaddr()を呼び出すと11001を受け取ります。どちらのデバイスも同じネットワークに接続されていることを示していますが、msdnドキュメント11001のエラーはHost not foundです。そのようなホストは知られていません。誰にも何か提案がありますか、ありがとう?私のコードは以下の通りです。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ルックアップエラーです。 120.15.22.14アドレスは実際にDNSに存在しますか?

あなたは、コマンドラインから

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を修正します。

gethostbyaddr()の代わりにgethostbyname()を使用しても同じ結果が得られますか?

DNS名をIPアドレスに変換する場合は、gethostbyname()を使用します。 IPアドレスをDNS名に変換するには、gethostbyaddr()を使用します。

リモートホストに接続する場合は、ホストのIPアドレスがいつでも変更される可能性があるため、通常はgethostbyname()コールを使用します。提供されたDNSは、そのホストのIPアドレスを常に正確に表します。これが好ましい方法です。

+0

説明していただきありがとうございます。私は多くのネットワークプログラミングについて知らないので、本当に役に立ちます。 – Bopha

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

+0

フォーラムを使用している情報に感謝します。 – Bopha