본문 바로가기

소켓

소켓프로그래밍 3 윈도우

win소켓


win소켓은 말그대로 윈도우용 소켓을 말합니다. 보통 리눅스를 서버로 많이 이용하고 윈도우를 클라이언트로 많이 이용하는데 따라서 윈도우 소켓도 필요합니다.


int WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData);

윈도우 소켓 프로그래밍을 할떄는 WSAStartup함수를 호출하여 프로그램에서 요구하는 윈도우 소켓의 버전을 알리고 해당 버전을 지원하는 라이브러리의 초기화 작업을 진행할수 있습니다.

성공 시 0, 실패 시 에러코드 값을 반환한다.

<winsock2.h>을 include해야한다.


<예제> <출처 열혈 tcp/ip 소켓 프로그래밍>

1
2
3
4
5
6
7
8
9
10
11
12
#include <stdio.h>
#include <winsock2.h>
#include <fcntl.h>
 
int main(int argc, char* argv[]) {
    WSADATA wsadata;
    if (WSAStartup(MAKEWORD(22), &wsadata) != 0) {
        fputs("WSAstartup error", stderr);
        fputc('\n', stderr);
    }
    return 0;
}
cs


WSAStartup이 실패하면 오류를 뜨게 하는 프로그램입니다.

WSAStartup에 인자로 들어가기 위해서는 MAKEWORD를 이용하여 사용할수 있습니다. 

만약 소켓버전이 1.2이다면 MAKEWORD(1,2) 이런식으로 할수 있습니다. 또 WSAStartup에 두번째 인자로 준

WSADATA의 구조체의 변수의 주소를 줍니다. 따라서 WSADATA 구조체의 변수인 wsadata의 주소가 들어가는 겁니다.


int WSACleanup(void);

위의 함수를 사용하면 할당된 윈도우 소켓 라이브러리는 윈도우 운영체제에 반환 되면서 윈도우 소켓 관련 함수의 호출이 불가능해 집니다.

소켓을 더이상 사용할 필요가 없을때 해줍니다.

성공시 0, 실패시 SOCKET_ERROR를 반환해줍니다.

<winsock2.h>을 include해야한다.


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

리눅스의 socket과 같은 기능을 제공합니다. 

성공시 소켓 핸들을 해주고, 실패하면 INVAILD_SOCKET(소켓오류인듯? 댓글로 아시는 분 설명좀)을 반환해줍니다.

<winsock2.h>을 include해야한다.

https://www.joinc.co.kr/w/man/4100/socket<소켓 인자로 들어가는거 설명>


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

리눅스의 bind 함수와 같은 기능을 제공하고 IP주소와 PORT번호 할당을 목적으로 합니다.

성공시 0, 실패 시 SOCKET_ERROR를 반환합니다.

<winsock2.h>를 include해야합니다.

https://www.joinc.co.kr/w/man/4100/bind<bind에 들어가는 인자 설명>


int listen(SOCKET s, int backlog);

이 함수는 소켓이 클라이언트 프로그램의 연결의 요청을 받아드일 수 있는 상태가 되게 하는 것을 목적으로 호출되는 함수입니다.

성공시 0, 실패시 SOCKET_ERROR를 반환합니다.

<winsock2.h>를 include 해야함.

https://www.joinc.co.kr/w/man/4100/listen<listen의 자세한 설명>


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

이 함수는 클라이언트 프로그램에서 연결 요청을 허락할때 호출하는 함수입니다.

성공시 소켓 핸들, 실패시 INVALID_SOCKET을 반환합니다.

<winsock2.h>를 include 해야함.

https://www.joinc.co.kr/w/man/4100/accept<accept 자세한 설명>


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

이 함수는 클라이언트 프로그램에서 소켓을 기반으로 연결요청을 할 떄 호출하는 함수입니다.

성공시 0, 실패시 SOCKET_ERROR를 반환합니다.

<winsock2.h>를 include해야한다.

https://www.joinc.co.kr/w/man/4100/connect<connect 자세한 설명>


int closesocket(SOCKET s);

이 함수는 소켓을 닫을때 호출하는 함수입니다.

성공시 0, 실패 시 SOCKET_ERROR를 반환합니다.

<winsock2.h>를 include해야한다.

https://msdn.microsoft.com/ko-kr/library/windows/desktop/ms737582(v=vs.85).aspx<closesocket 자세한 설명>


'소켓' 카테고리의 다른 글

소켓 프로토콜과 데이터 전송 특성  (0) 2018.06.27
소켓프로그래밍2 리눅스  (0) 2018.06.24
소켓프로그래밍1 리눅스  (1) 2018.06.24