지난 포스팅까지 TCP프로토콜을 사용하는 서버와 클라이언트를 구현해보았다.
이번 포스팅에서는 서로 연결된 네트워크끼리 데이터를 통신하는 send함수와 recv함수에 대해서 알아본다.
1) send 함수
send(socket, buffer, sizeof(buffer), 0);
send함수를 통해 소켓으로 연결되어있는 다른 프로세스에게 데이터를 보낼 수 있다.
- 1번째 인자: 데이터를 보낼 연결상태의 소켓
- 2번째 인자: 전송할 데이터를 담고있는 데이터버퍼의 포인터. 데이터버퍼는 char배열 형식이다
- 3번째 인자: 데이터 버퍼의 byte크기
- 4번째 인자: 특별한 옵션을 주기 위한 플래그이다. 옵션은 '|| (OR)'로 조합할 수 있다. 따로 옵션을 지정하지 않는다면 0을 주어 생략가능하다.
옵션 값 | 옵션 값 의미 |
MSG_DONTROUTE | 데이터를 전송할때 라우팅 테이블을 참조하지 않는다 |
MSG_OOB | 데이터를 긴급 전송모드(Out-of-band data 모드)로 전송한다 |
send함수는 오류가 없다면 보냈던 데이터의 byte크기를 반환한다. 만일 오류가 발생한다면 SOCKET_ERROR라는 오류코드를 반환한다. WSAGetLastError() 함수를 호출하면 어떤 종류의 오류가 발생하였는지 확인할 수 있다.
2) recv 함수
recv(clientSocket, buffer, BUF_SIZE, 0);
recv함수를 통해 다른 프로세스로부터 온 데이터를 수신할 수 있다.
- 1번째 인자: 데이터를 수신할 연결상태의 소켓
- 2번째 인자: 수신된 데이터를 담을 데이터버퍼의 포인터. 데이터버퍼는 char배열 형식이다
- 3번째 인자: 데이터 버퍼의 byte크기
- 4번째 인자: 특별한 옵션을 주기 위한 플래그. send함수와 마찬가지로 별 옵션을 주지않는다면 0을 기입한다.
recv함수도 정상적으로 수신되었을 때에는 받은 데이터의 byte크기를 반환한다. 오류가 발생하였을때는 마찬가지로 SOCKET_ERROR를 반환한다.
이번 포스팅으로 데이터를 전송하는 send()와 recv()함수를 알아보았다.
이후 포스팅에서는 echoServer(보냈던 메세지를 그대로 답해주는 서버)를 우선 구현하여 서버와 클라이언트 통신을 다뤄볼 예정이다.
'Windows Socket' 카테고리의 다른 글
다중 접속 서버 모델 (0) | 2021.11.16 |
---|---|
Windows TCP서버 소켓 통신 - echoServer 구현하기 (0) | 2021.04.13 |
Windows TCP서버 소켓 통신 - 클라이언트 소켓 (0) | 2021.04.05 |
Windows TCP서버 소켓 통신 시작하기 (0) | 2020.08.09 |
소켓의 정의와 Windows 소켓 만들기 (1) | 2020.07.30 |