본문 바로가기

[+] Information/[-] Network

[2009/5/24] 윈도우즈 기반으로 구현하기

1. 윈속을 위한 헤더 및 라이브러리 설정

 

 - winsock2.h 헤더 파일을 포함 한다.

 - ws2_32.lib 라이브러리를 링크 시킨다.

 - 윈속 사용을 위한 라이브러리 초기화 및 해제

 * Project -> Setting ->  Link -> Object/library modules: 맨끝에 ws2_32.lib를 써준다.

 


2. 윈속 사용을 위한 라이브러리 초기화 및 해제

 - 윈속 관련 라이브러리 초기화 함수.

#incldue <winsock2.h>

int WSAStartup(

/* 내가 초기화 하고자 원하는 라이브러리 버전.
ex) Version 3.4(3 = 주 버전, 4 = 부 버전)
      0x0403(16진수, 04 = 부 버전, 03 = 주 버전, 16진수로 라이브러리 버전 전달) */
 WORD wVersionRequested,
 LPWSADATA lpWSAData
);

 * WORD = 16-bit unsigned integer

 * WSADATA = 구조체.

 * LPWSADATA = WSADATA를 가리키는 포인터.


 - 윈속 관련 라이브러리 해제 함수.

int WSACleanup(void);


 - 버전 정보 16진수로 만드는 함수.

WORD MAKEWORD(BYTE bLow, BYTE bHigh);

 * BYTE bLow = 주 버전.

 * BYTE bHigh = 구 버전.


 


3. 윈속 기반의 소켓 관련 함수.

SOCKET socket(int af, int type, int protocol);

int bind(SOCKET s, const struct sockaddr FAR * name, int namelen);

int listen(SOCKET s, int backlog);

SOCKET accept(SOCKET s, struct sockaddr FAR * addr, int FAR * addrlen);

int connect SOCKET s, const struct sockaddr FAR * name, int namelen);

* 소켓 핸들도 정수형 데이터.


 


4. 윈속 기반의 데이터 입 출력 함수.

 - 데이터 출력함수.

#include <winsock2.h>

int send(SOCKET s, const char FAR *buf, int len, int flags);

 - 데이터 입력함수.

#incldue <winsock2.h>

int recv(SOCKET s, char FAR *buf, int len, int flags);

 * int flags 부분만 빼면 리눅스 기반의 인자값들과 동일하게 전달함.

 


* Project -> Setting -> Debug -> Program arguments(main 함수 인자값 전달 설정)