- API SOCKET 사용하기.

 

C++에서 소켓 통신을 하기 위해서 API에서 제공하는 SOCKET을 이용하면 된다.

 

<Server / Client 공통>

 

 1. Header File 추가 & Lib 연결.

  · winsock2.h Header File Include.

  · ws2_32.lib Library 링크.

   (프로젝트마다 링크를 시켜줘야 하는 불편함이 있기 때문에 하기와 같이 프로그램으로 선언해두면 자동으로 링크가 된다.)

 

1
2
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")
cs

 

 2. Socket 변수 선언

  · SOCKET형 변수.

  · WSDATA형 변수. 

 

1
2
SOCKET m_Socket;
WSADATA m_wsaData;
cs

 

3. ws2_32.lib 초기화.

  · WSAStartup 함수 호출. (Window Socket을 사용하겠다고 System에 알려주는 함수)

  · WSAStartup 함수는 ws2_32.lib를 초기화 해주어 Window Socket을 사용할 수 있도록 해준다.

  · WSAStartup 함수를 호출해야 Winsock 관련 함수를 사용할 수 있다.

  · Winsock 종료 시에는 반드시 WSACleanup() 을 호출해야만 한다.

 

  - WSAStartup 함수.

  Parameter 1 : 사용할 소켓의 버전이 2.2라는 것을 알려준다.

  Parameter 2 : WSDATA 구조체 변수의 주소값을 넘겨주면 해당 변수에 초기화된 라이브러리 정보가 채워진다.

 

  Return : 정상적으로 초기화가 되면 0 값을 반환.

 

1
2
3
4
5
6
    if(WSAStartup(MAKEWORD(2,2), &m_wsaData) == INVALID_SOCKET)
    {
        printf("WSAStartup() failed : %d", WSAGetLastError());
        WSACleanup();
        return false;
    }
cs

 

4. Socket 생성. (전화기 장만)

  · Socket을 만들어주는 함수.

 

  - socket 함수.

  Parameter 1 : 주소 패밀리(Address Family)를 적어준다. (Internet Protocol 4 (IPv4)를 사용한다면 AF_INET)

  Parameter 2 : 소켓 타입을 적어준다. (SOCK_STREAM : TCP 방식 / SOCK_DGRAM : UDP 방식)

  Parameter 3 : Protocol (0 값을 넣어주면 그에 맞는 Protocol을 사용하도록 한다.)

 

  Return : 성공적으로 Socket이 만들어지면 SOCKET형 데이터를 반환. / 실패 시 INVALID_SOCKET 반환.

 

1
2
3
4
5
6
    m_Socket = socket(AF_INET, SOCK_STREAM, 0);
    if(m_Socket == INVALID_SOCKET)
    {
        printf("socket() failed : %d", WSAGetLastError());
        return false;
    }
cs

 

'Programming > Socket' 카테고리의 다른 글

[API] 소켓 통신 4 <Client>  (0) 2017.05.22
[API] 소켓 통신 1 <Server/Client 흐름도>  (0) 2017.05.22

+ Recent posts