MFC에서 IP 주소 구하기(얻기,찾기)
내부 IP
//StdAfx.h에 선언 #include "winsock2.h" #pragma comment(lib, "WS2_32.lib") #define DESIRED_WINSOCK_VERSION 0x0101 #define MINIMUM_WINSOCK_VERSION 0x0001 //선언 끝 //함수구현 CString GetInIpAddress() { WSADATA wsadata; CString strIP; // 이 변수에 IP주소가 저장된다. strIP = ""; if( !WSAStartup( DESIRED_WINSOCK_VERSION, &wsadata ) ) { if( wsadata.wVersion >= MINIMUM_WINSOCK_VERSION ) { HOSTENT *p_host_info; IN_ADDR in; char host_name[128]={0, }; gethostname(host_name, 128); p_host_info = gethostbyname( host_name ); if( p_host_info != NULL ) { for( int i = 0; p_host_info->h_addr_list[i]; i++ ) { memcpy( &in, p_host_info->h_addr_list[i], 4 ); strIP = inet_ntoa( in ); } } } WSACleanup(); } return strIP; }
외부 IP
#include //함수구현 CString GetIpAddress() { WORD wVersionRequested; WSADATA wsaData; char name[255]; PHOSTENT hostinfo; CString strIpAddress = _T(""); wVersionRequested = MAKEWORD(2, 0); if(WSAStartup(wVersionRequested, &wsaData) == 0) { if(gethostname(name, sizeof(name)) == 0) { if((hostinfo = gethostbyname(name)) != NULL) strIpAddress = inet_ntoa (*(struct in_addr *)*hostinfo->h_addr_list); } WSACleanup(); } return strIpAddress; }
클라이언트 IP얻기
sockaddr 구조체
struct sockaddr{ sa_family_t sa_family; // PF_INET= IPv4 주소체계. char sa_data[14]; // 사용하는 주소 정보. }
sockaddr_in 구조체
IPv4 체계구조체다.
범용 주소 구조체로 sockaddr을 사용하지만, 주소체계에 따라 별도의 전용 구조체 사용 권장.
라이브러리에 넘길 때는 sockaddr로 형 변환을 하여 넘긴다.다른 주소체계 중 Local Unix 주소 체계는 sockaddr_un 구조체를 사용.
struct sockaddr_in{ sin_family_t sin_family; // IPv4 주소체계 AF_INET으로 설정 unist16_t sin_port; // 포트 struct in_addr sin_addr; // IP주소 정수 타입 구조체 char sin_zero[8]; // sockaddr 크기 맞추기 위한 버퍼. } SOCKET s; SOCKET client_s; char lpszMsg[100]; SOCKADDR_IN m_addr; SOCKADDR_IN m_clientAddr; client_s = accept(s, (LPSOCKADDR)&m_clientAddr, &m_nClientAddrLen); if (client_s == INVALID_SOCKET) { wsprintf(lpszMsg, "accept() 에러 번호: %d", WSAGetLastError()); MessageBox(hwnd, lpszMsg, "에러", MB_OK); } else { wsprintf(lpszMsg, "client IP: %s",inet_ntoa(m_clientAddr.sin_addr.s_addr)); MessageBox (hwnd, lpszMsg, "에러", MB_OK); }
'개발언어 > c++' 카테고리의 다른 글
CFileDialog 사용법 (0) | 2016.10.19 |
---|---|
JPG, GIF, BMP, WMF, EMF, ICO 열기(IPicture 사용법) (0) | 2016.10.19 |
고속연속평균-실시간평균 (0) | 2016.09.16 |
SAFEARRAY를 사용한 VARIANT ARRAY(배열) 다루기(VC++) (0) | 2016.09.02 |
[MFC]NI CWGraph 사용예제 (0) | 2016.08.02 |