본문 바로가기

카테고리 없음

local 의 ip 주소 알아내기 in windows

/Q// 

실행시킨 컴퓨터의 여러가지 정보를 가져와서 그중 IP 어드레스를 통해 여러가지 통신을 할 수 있도록 했습니다. 
다만 IP를 어떻게 뽑아올수 있는지 VCL 이 있으면 좋은데 (제가 보기엔 없는듯...) 없다면 API라도 알려주신다면 감사하겠습니다. 



/A// 

만약 실제로 네트워킹을 하는 프로그램이라면 간단히 소켓같은 컴퍼넌트를 하나 놓고 
아무데나 접속하기만 하면 LocalAddress 프로퍼티에 현재 시스템의 IP값이 나옵니다. 
하지만 이 방법은 꼭 접속을 해야만 IP를 알 수 있으므로, 항상 접속할 수 있는 
서버가 있어야만 가능하겠죠. 

winsock api를 이용한 방법이 있는데, 단 하나의 함수로 되어있는 간단한 방법은 
아니고, 좀 복잡합니다. 다음 함수는 원래 어딘가에서 주워놨던 소스인데, 
지금 테스트를 해보니 동작하지 않아서 제대로 동작하도록 약간 수정해서 보여드립니다. 

#include <winsock.h> 

AnsiString __fastcall GetLocalIP(void) 

    WSAData wsaData; 
    if (WSAStartup(MAKEWORD(1, 1), &wsaData) != 0) 
        return ""; 
    char slocal[256]; 
    if (gethostname(slocal, 256) == SOCKET_ERROR) 
        return ""; 
    hostent *hos = gethostbyname(slocal); 
    if(hos == NULL) 
        return ""; 
    char *addr = *(hos->h_addr_list); 
    AnsiString LocalIP = AnsiString((unsigned char)addr[0]) + '.' 
                         + AnsiString((unsigned char)addr[1]) + '.' 
                         + AnsiString((unsigned char)addr[2]) + '.' 
                         + AnsiString((unsigned char)addr[3]); 
    WSACleanup(); 
    return LocalIP;