현재 사용중인 ip주소를 가져오는 방법
현재 사용중인 ip를 가져오는 방법에 대해 알아보도록 하자
방법은 간단하다 gethostbyname()함수를 사용하면 HOSTENT 구조체에 대한 포인터를 리턴하게 되어있다.
HOSTENT 의 구조체 내용을 보면 아래와 같은데
struct hostent { char FAR * h_name; char FAR * FAR * h_aliases; short h_addrtype; short h_length; char FAR * FAR * h_addr_list; };
뭐 위에 대한 구조체에 대한 정의는 인터넷 검색하면 금방나오므로 쉽게 알 수 있을 것이다.
뭐 대락적으로 보면 'h_addr_list에 주소값이 들어 있겠구나' 라고 감이 올것이다.
우선 저 함수를 사용하려면 호스트네임이 필요한데 그건 간단히 gethostname()함수를 쓰면 간단하게 호스트 이름을 얻어낼 수 있다.
자..그럼 현재 자신이 사용하고 있는 ip를 가져오는 소스를 보자면 아래와 같다.
#include <afxsock.h> //헤더파일 추가해주고~
CString GetCurrentIP()
{
WSADATA wsadata;
char szHostName[256] ={0,};
HOSTENT* pHostInfo;
CString sCurrentIP = "";
if( WSAStartup(MAKEWORD(2, 0) , &wsadata) == 0) //윈도우즈 소켓을 초기화 하는 함수.
//MAKEWORD(2,0)은 시스템상에서 윈속 버젼을 요청,
//제공되는 윈소켓중에서 호출자가 사용할 수 있는 최고 버전을 설정
{
if( gethostname(szHostName, sizeof szHostName ) == 0 ) //호스트이름을 가져오고
{
if( pHostInfo = gethostbyname(szHostName) )
{
if( pHostInfo ) //정보를 가져왔다면
{
sCurrentIP = inet_ntoa( *(struct in_addr*)*pHostInfo ->h_addr_list ) ;
//inet_ntoa()함수는 네트워크 바이트 순서(Network-byte order)의 바이너리 주소를 IP address로 변경
}
}
}
WSACleanup();
}
return sCurrentIP;
}
정보는 공유되어야 한다 쭈욱~~