소켓 프로그래밍

소켓 프로그래밍 (2) 네트워크 프로그래밍과 소켓의 이해

ddanss 2018. 9. 29. 11:03
728x90

윈도우 소켓을 위한 헤더와 라이브러리의 설정

헤더파일 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 ; 데이터 수신 시 적용할 다양한 옵션 정보 전달.

반응형