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