서버 이름을 리스트 박스에 출력하는 샘플(gethostbyaddr() 함수 이용)
폼에 리스트 박스 하나 추가하고 테스트한다.
gethostbyaddr의 타임아웃 문제는 고려하지 않았다.
WSAData wsadata;
if(WSAStartup (MAKEWORD(1,1), &wsadata) != 0 )
{
ShowMessage("에러");
}
char ip[16];
in_addr addr;
hostent *host = 0;
String errorcode;
for(int i=0;i<255;i++)
{
sprintf(ip,"211.178.64.%d",i);
addr.S_un.S_addr = inet_addr(ip);
host = gethostbyaddr ( (char *)(&addr.S_un.S_addr), sizeof(addr.S_un.S_addr), AF_INET);
int error = WSAGetLastError();
switch(error)
{
case WSANOTINITIALISED :
errorcode = "WSANOTINITIALISED";
break;
case WSAENETDOWN :
errorcode = "WSAENETDOWN";
break;
case WSAHOST_NOT_FOUND :
errorcode = "WSAHOST_NOT_FOUND";
break;
case WSATRY_AGAIN :
errorcode = "WSATRY_AGAIN";
break;
case WSANO_RECOVERY :
errorcode = "WSANO_RECOVERY";
break;
case WSANO_DATA :
errorcode = "WSANO_DATA";
break;
case WSAEINPROGRESS :
errorcode = "WSAEINPROGRESS";
break;
case WSAEAFNOSUPPORT :
errorcode = "WSAEAFNOSUPPORT";
break;
case WSAEFAULT :
errorcode = "WSAEFAULT";
break;
}
if(host != NULL)
ListBox1->Items->Add( host->h_name);
else
{
ListBox1->Items->Add(errorcode);
}
}
String msg = "테스트가 끝났습니다.";
ShowMessage(msg);