- API SOCKET 사용하기.
C++에서 소켓 통신을 하기 위해서 API에서 제공하는 SOCKET을 이용하면 된다.
<Server / Client 공통>
1. Header File 추가 & Lib 연결.
· winsock2.h Header File Include.
· ws2_32.lib Library 링크.
(프로젝트마다 링크를 시켜줘야 하는 불편함이 있기 때문에 하기와 같이 프로그램으로 선언해두면 자동으로 링크가 된다.)
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 |