MFC Socket

#include <afxsock.h>


만들고자하는 App 클래스의 InitInstanceApp() 함수에서

AfxSocketInit();

로 소켓 사용을 초기화 한다

내부적으로는 WSAStartup() 으로 구현되어있으며, 해제시의 WSACleanup() 은 자동 호출된다.


CAsyncSocket은 비동기 소켓(non-blocking)
CSocket은 동기 소켓(blocking)





Win32 API Socket (WSA)


1]. 윈도우즈 소켓을 위한 헤더와 라이브러리 설정

1. Header : 헤더파일 추가
          Win32 : winsock.h
          Win32-II : winsock2.h

2. Import Library : winsock2.h 헤더파일을 포함하기위해 WS2_32.LIB 라이브러리를
                            링크시켜야 한다.
          Win32 : wsock32.lib
          Win32-II : ws2_32.lib  VC++ 에서 Alt-F7 프로젝트 속성에서 Link에 추가한다.

사용자 삽입 이미지



2]. 윈속 초기화 하기


WSADATA       wsaData;                                                     //WinSock을 위한 내부 자료구조

WORD            wVersionRequested = MAKEWORD(2, 2);    
// WinSock 버전을 위한 부분(WinSock 2.2 를 의미한다,
// MAKEWORD 매크로함수는 winsock2.h에 구현되어 있음)


WSAStartup(wVersionRequested, &wsaData);                   //WinSock 사용 초기화



 

3]. 윈속 리소스 해제

WSACleanup();




4]. 참고

BSD계열 API로

socket()

bind()

listen()

connect()

send()

recv()

closesocket()          
// close 대신 closesocket()을 사용한다

ioctlsocket()            
//  ioctl 이나  fcntl 대신 ioctlsocket()을 사용한다(non-Blocking mode로 변경시 주로 사용)

기본적으로  WSA 소켓은 디폴트로 Blocking I/O 모드로 작동하며, ioctlsocket()으로
non-Blocking 모드로 변경이 가능하다



참고 : http://blog.naver.com/agnazz?Redirect=Log&logNo=100018139151

Posted by six605
,