gethostbyaddr()有错误11001

时间:2009-05-29 01:29:26

标签: winsock

我正在编写简单的程序来在智能设备之间进行通信,并在调用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;
    }
}

2 个答案:

答案 0 :(得分: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返回错误,因此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地址,那么这是首选方式。

答案 1 :(得分:0)

我只输入nslookup 120.15.22.14,但它返回为无法找到120.15.22.14。不存在的域名。

我查看DNS的设备设置,它设置为120.20.32.10,这是不同的120.15.22.14所以这是否意味着我没有配置DNS?

相关问题