2016-06-23 3 views
-1

私はこのコードをC++でサーバーに接続しましたが、 "gethostbyname"を試すたびに値がnull(最適化されていて使用できません)です。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は上記のホスト構造体へのポインタを返します。そうでない場合は、NULLポインタを返し、特定のエラー番号をWSAGetLastErrorを呼び出して取得できます。 (MSDN) – lorro

+1

開いているソケットとホストクエリの間の想定される関係は何ですか? –

答えて

4

hostは誤ってnullです。返り値WSAGetLastError()をチェックして何が間違っているかを調べます。

cmdシェルでping www.example.comを呼び出して、ターゲットがコンピュータから到達可能かどうかを確認してみてください。アドオンを最適化しないように

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

gethostbyname()によって返さない店舗ポインタを行います。同じスレッドによって次の呼び出しでオーバーライドされます。

+0

'gethostbyname()'は、DNSなどでホスト名をIPアドレスに解決できない場合に失敗します。 'ping'は' gethosbyname() 'と同じではありません。 'ping'はターゲットがネットワーク上で到達可能かどうかを実際に調べるので、' gethosbyname() 'が成功しても、ターゲットへのネットワークルートがなければ' ping'は失敗する可能性があります。 –

+0

@ Remy Lebeau 私はそれが同じだと主張しませんでしたが、pingが失敗するとgethostbynameも失敗する可能性があります。 – lexx9999

+0

は 'ping'が失敗する方法に依存します。 'ping'はホスト名をIPに解決できますが、それでもホストマシンと実際に通信することはできません。 –