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 |