gethostbyaddr () имеет ошибку 11001 - PullRequest
0 голосов
/ 29 мая 2009

Я пишу простую программу для связи между интеллектуальными устройствами, и я получаю 11001 при вызове gethostbyaddr (). Оба устройства показывают, что они подключены к одной и той же сети, но из документа 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;
    }
}

Ответы [ 2 ]

0 голосов
/ 29 мая 2009

Я просто набираю nslookup 120.15.22.14, но он возвращается обратно, так как не могу найти 120.15.22.14. Несуществующий домен.

Я смотрю на настройки моего устройства для DNS, и он устанавливается на 120.20.32.10, который отличается от 120.15.22.14, так значит ли это, что я не настроил DNS?

0 голосов
/ 29 мая 2009

Ошибка 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 возвращает ошибку, в DNS нет записи для этого IP-адреса. Это твоя проблема.

Я смотрю на настройки моего устройства для 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-адрес этого хоста, это предпочтительный способ.

...