1 entries contain 'CSocket'

  1. 2007/07/06 MFC의 CAsyncSocket 대용 소켓.

프로그래밍 - Windows/MFC

MFC의 CAsyncSocket 대용 소켓.


며칠전에 발생했던 듀얼 씨피유에서 발생되던 패킷 에러 문제를 해결하기 위해 Winsock2 API를 사용하기로 했으나, 바꿔야할 소스의 양이 상당히 많다는 걸 깨달았다. 다행히도 문제가 된 프로그램은 구조적으로 CSocket를 상속한 클래스였기 때문에 , CSocket (정확히는 CAsyncSocket)을 대체하는 클래스를 만들어 해결했다.
앞으로 클라이언트 소켓 짤때 종종써야지~


사용법 :
1. stdafx.h에 아래의 코드를 추가한다.

#include <winsock2.h>
#pragma comment(lib, "Ws2_32.lib")

2. 초기화 부분에
 CString tmp = _T("");
 WSADATA WsaData;
 if(::WSAStartup(MAKEWORD(2, 2), &WsaData))
 {
  tmp.Format("윈속을 초기화 하는데 실패했습니다. [ERROR CODE:%d]",
              ::WSAGetLastError());
  AfxMessageBox(tmp);
  return FALSE;
 }
를 추가한다.

3. CSocket을 상속받아 썼던 소켓클래스를 다음과 같이 변경했다.
class CDataSocket : public CSocket
->  class CDataSocket : public CAsyncSocketBase

동작 원리 : 별도의 Thread를 생성하여 WSAWaitForMultipleEvents으로 SOCEKT의 FD_READ와 FD_CLOSE를 잡아내어 OnClose, OnReceive 함수를 실행시킨다. virtual로 되어있어서
일반 CSocket사용과 동일하게 사용


1차 버젼으로 자주 쓰는 함수들만 작성해 놓았다.

그 외 CSocket(혹은 CAsyncSocket)에 있는 함수들은 시간날때 작성해 보도록 하자!
top