0

スマートデバイス間で通信するための簡単なプログラムを書いていますが、gethostbyaddr()を呼び出すと11001を受け取ります。両方のデバイスは、同じネットワークに接続されていることを示していますが、msdnドキュメント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;
    }
}
4

2 に答える 2

0

エラー11001は一般的なDNSルックアップエラーであるため、質問は1つだけです。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.15.22.14とは異なる120.20.32.10に設定されているので、DNSを構成していないということですか?

120.20.32.10がデバイスのDNSに120.15.22.14あり、実際のアドレスである場合、DNSは間違っています。簡潔でシンプル。DNSを修正します。

gethostbyaddr()の代わりにgethostbyname()を使用した場合、同じ結果が生成されますか?

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

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

于 2009-05-29T01:47:00.027 に答える
0

nslookup 120.15.22.14と入力しただけですが、120.15.22.14が見つからないため返されます。存在しないドメイン。

DNSのデバイス設定を確認すると、120.15.22.14とは異なる120.20.32.10に設定されているので、DNSを構成していないということですか?

于 2009-05-29T01:56:07.683 に答える