gethostbyname C++的问题

问题描述:

我已经使用C++编写代码来连接到服务器,但每次尝试“gethostbyname”时,该值都为空(或者优化掉并且不可用)。gethostbyname C++的问题

WSADATA wsaData; 
if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) { 
    cout << "WSAStartup failed.\n"; 
    system("pause"); 
    return 1; 
} 
hostent *host = gethostbyname("www.example.com"); 

我试过hostent作为volatile,但仍然给null。 有没有其他方法可以使这项工作? 我试过太优化禁用,但一直给null。

+1

“返回值 如果没有错误发生,gethostbyname返回一个指向上述hostent结构的指针,否则返回一个空指针,通过调用WSAGetLastError可以检索到特定的错误号。 (MSDN) – lorro

+1

打开的套接字和主机查询之间的假定关系是什么? –

host在出错时为空。检查返回值WSAGetLastError()找出错误。

尝试在cmd shell中调用ping www.example.com以检查目标是否可从您的计算机访问。

为了不优化插件:通过gethostbyname()返回

if(host!=NULL && host->h_name) 
    cout << "host: " << host->h_name << std::endl; 

不要储存指针。它们在同一个线程的下一个呼叫中被覆盖。

+0

如果gethostbyname()不能将主机名解析为IP地址,例如通过DNS,则会失败。 'ping'与'gethosbyname()'不同。 'ping'实际上检查目标是否可以在网络*问,所以即使'gethosbyname()'成功了,如果没有到目标的网络路由,'ping'仍然会失败。 –

+0

@ Remy Lebeau 我没有声称它是一样的,但如果ping失败,gethostbyname可能也会失败。 – lexx9999

+0

,这取决于'ping'失败的方式。 'ping'可能能够将主机名解析为IP,但仍然无法实际与主机进行通信。 –