2016-06-23 6 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"); 

휘발성 호스트로 시도했지만 여전히 null을 제공합니다. 다른 방법으로이 작업을 할 수 있습니까? 너무 최적화를 시도했지만 null을 계속 제공합니다.

+1

"반환 값 gethostbyname은 위에서 설명한 hostent 구조체에 대한 포인터를 반환하고, 그렇지 않으면 null 포인터를 반환하고 WSAGetLastError를 호출하여 특정 오류 번호를 검색 할 수 있습니다." (MSDN) – lorro

+1

열린 소켓과 호스트 쿼리 간의 가정 된 관계는 무엇입니까? –

답변

4

host은 오류 발생시 null입니다. 잘못된 값을 찾기 위해 반환 값 WSAGetLastError()을 확인하십시오.

cmd 쉘에서 ping www.example.com을 호출하여 대상이 컴퓨터에서 도달 할 수 있는지 확인하십시오. gethostbyname()에 의해 반환

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

하지 마십시오 포인터를 저장 :

는 추가를 최적화하지합니다. 같은 thread에 의해 다음의 호출로 오버라이드 (override)됩니다.

+0

'gethostbyname()'은 호스트 명을 DNS 등의 IP 주소로 해석 할 수없는 경우 실패합니다. 'ping'은'gethosbyname()'과 같은 것이 아닙니다. 'ping'은 실제로 네트워크에서 목표가 도달 할 수 있는지를 검사하기 때문에'gethosbyname()'이 성공하더라도 목표물에 대한 네트워크 경로가 없다면'ping'은 실패 할 수 있습니다. –

+0

@ Remy Lebeau 나는 그것이 동일하다고 주장하지는 않았지만 ping이 실패하면 gethostbyname도 실패 할 것입니다. – lexx9999

+0

은'ping '이 실패하는 방식에 따라 다릅니다. 'ping '은 호스트 이름을 IP로 해석 할 수 있지만 여전히 호스트 시스템과 실제로 통신 할 수 없습니다. –