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

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

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

于 2009-05-29T01:56:07.683 回答
0

错误 11001 是一个通用的 DNS 查找错误,所以我只有一个问题。DNS中真的存在120.15.22.14地址吗?

您可以通过键入

nslookup 120.15.22.14

从命令行。

如果您收到错误,那是因为 DNS 对这些地址一无所知,因此 agethostbyaddr()将无法为您提供任何信息。

更新:

回答你的观点:

我只是输入 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 地址,这是首选方式。

于 2009-05-29T01:47:00.027 回答