소켓 프로그래밍 (2) 네트워크 프로그래밍과 소켓의 이해
윈도우 소켓을 위한 헤더와 라이브러리의 설정
헤더파일 winsock2.h를 포함
ws2_32.lib 라이브러리를 링크. (중요)
winsock 초기화
#include <winsock2.h>
int WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData);
-> 성공 시 0, 실패 시 0이 아닌 에러코드 값 반환
-> wVersionRequested : 프로그래머가 사용할 윈속의 버전정보 전달
- > 만약에 사용할 소켓의 버전이 1.2라면, 1이 주버전이고 2가 부버전이므로 0x0201을 인자로 전달해야함.
-> lpWSAData : WSADATA라는 구조체 변수의 주소값 전달
winsock 해제
#include <winsock2.h>
int WASCleanup(void);
-> 성공 시 0, 실패 시 SOCKET_ERROR반환
리눅스의 socket함수와 동일한 기능을 하는 함수
#include <winsock2.h>
SOCKET socket(int af, int type, int protocol);
-> 성공 시 소켓 핸들, 실패 시 INVALID_SOCKET 반환
리눅스의 bind함수와 동일한 기능을 하는 함수
#include <winsock2.h>
int bind(SOCKET s, const struct sockaddr * name, int namelen);
-> 성공 시 0, 실패 시 SOCKET_ERROR 반환
리눅스의 listen함수와 동일한 기능을 하는 함수
#include <winsock2.h>
int listen(SOCKET s, int backlog);
-> 성공 시 0, 실패 시 SOCKET_ERROR 반환
리눅스의 accept함수와 동일한 기능을 하는 함수
#include <winsock2.h>
SOCKET accept(SOCKET s, struct sockaddr*addr, int*addrlen);
-> 성공 시 소켓 핸들, 실패 시 INVALID_SOCKET 반환
리눅스의 connect함수와 동일한 기능을 하는 함수
#include <winsock2.h>
int connect(SOCKET s, const struct sockaddr*name, int namelen);
-> 성공 시 0, 실패 시 SOCKET_ERROR 반환
리눅스의 close함수와 동일한 기능을 하는 함수
#include <winsock2.h>
int closesocket(SOCKET s);
-> 성공 시 0, 실패 시 SOCKET_ERROR 반환
윈도우 소켓 기반의 데이터 입력 함수
#include <winsock2.h>
int send(SOCKET s, const char * buf, int len, int flags);
-> 성공 시 전송된 바이트 수, 실패 시 SOCKET_ERROR 반환
-> s : 데이터 전송 대상과의 연결을 의미하는 소켓의 핸들 값 전달
-> buf : 전송할 데이터를 저장하고 있는 버퍼의 주소 값 전달
-> len : 전송할 바이트 수 전달
-> flags : 데이터 전송 시 적용할 다양한 옵션 정보 전달
윈도우 소켓 기반의 데이터 출력 함수
#include <winsock2.h>
int recv(SOCKET s, const char * buf, int len, int flags);
-> 성공 시 수신한 바이트 수 (단 EOF전송 시 0), 실패 시 SOCKET_ERROR반환)
-> s : 데이터 수신 대상과의 연결을 의미하는 소켓의 핸들 값 전달
-> buf : 수신된 데이터를 저장할 버퍼의 주소 값 전달
-> len : 수신할 수 있는 최대 바이트 수 전달
-> flgs ; 데이터 수신 시 적용할 다양한 옵션 정보 전달.