티스토리 뷰

프로그래밍

WSAAsyncSlect

에어버스 2023. 6. 24. 12:17

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 멀티바이트로 프로젝트를 만든다.
유니코드로 하면 통신할때 글씨가 깨지거나 잘린다.

멀티바이트 문자집합 사용 소스코드

ChatClient.zip
0.43MB
ChatServer.zip
0.79MB

유니코드 문자집합 사용 소스코드

ChatServer_UNICDE.zip
0.75MB
ChatClient_UNICODE.zip
0.44MB

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30