티스토리 뷰
TCP/IP 통신은 송수신은 1Byte 전송하므로 UNICODE 를 사용한다면 MuliteByte문자와 UNICODE 상호 변환이 필요하다.
MultiByteToWideChar(CP_ACP, 0, m_addr, -1, w_addr, 128);
WideCharToMultiByte(CP_ACP, 0, w_buf, -1, m_buf, sizeof(szMsg) * 2, NULL, NULL);
m_ 는 멀티바이트, w_ 는 유니코드
윈도우 소켓 모델은 Blocking, select, WSAAsyncSelect, WSAEventSelect, Overlapped, IOCP 있다.
Blocking, select 는 단일스레드로 유닉스 호환되며 MS DOS 환경에서 사용된듯 하다.
WSAAsyncSelect
- 단일 스레드만 지원
- WSAAsyncSelect(SOCKET s, HWND hWnd, unsigned int wMsg, long lEvent)
이 함수가 핵심이며 소켓(s) 과 윈도우(hWnd) 를 연결하는 함수이며
lEvent(FD_READ | FD_CLOSE) 이벤트가 발생하면 사용자 정의메시지인 wMsg를 발생하여
이 메시지의 wParam=SOCKET, lParam=FD_READ 또는 FD_CLOSE 가 전달되어 lParam 의 상위 16비트=FD_READ 또는 RD_CLOSE 값을 갖고, 하위 16비트에는 에러코드 값을 가진다.
즉, Client가 데이타를 보내거나 연결을 끊으면 핸들(hWnd)로 wMsg(사용자 정의) 메시지를 보낸다. 이때 WPARAM=SOCKET, LPARAM=FD_READ | 에러코드 를 보낸다.
Win32 멀티바이트로 프로젝트를 만든다.
유니코드로 하면 통신할때 글씨가 깨지거나 잘린다.
멀티바이트 문자집합 사용 소스코드
유니코드 문자집합 사용 소스코드