본문 바로가기

Programming Language/C&C++

소켓 통신 #2 - AF_INET 사용하기 (4)

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

소켓 통신 #2 - AF_INET 사용하기 (4)

- by Tapito


이전 포스팅까지 해서 서버와 클라이언트간의 연결 작업은 모두 마쳤습니다. 이제 본격적으로 데이터를 교환해보겠습니다.

데이터의 교환은 전송을 담당하는 send와 수신을 담당하는 recv 함수로 수행됩니다.

int send(SOCKET s, const char * buf, int len, int flags);
int recv(SOCKET s, char * buf, int len, int flags);

s: 데이터를 주고 받을 대상을 나타내는 소켓입니다.
buf: 주고 받을 데이터가 기록되어있거나 기록될 버퍼입니다.
len: 버퍼의 크기(바이트)입니다.
flags: 송수신 관련 옵션입니다. 현재로서는 0으로 해도 무방합니다.

반환 값은 상대방에게 실제로 송신 또는 수신한 데이터 바이트 수로 len보다 작거나 같을 수 있습니다. 전송 이상 시 SOCKET_ERROR이 반환됩니다.

사용 방법을 보면

/* 사용 예 */
/* 상대방으로 보낼 메시지 */
char message[] = "Hello, World!";
/* 상대방에게서 전해오는 메시지 */
char buffer[256];

// ... 소켓 세팅 생략

strcpy(buffer, message);

/* 보낼 때 */
printf("sending...\n");
status = send(sockServer, buffer, sizeof(buffer), 0);
if (status == SOCKET_ERROR) // 전송 이상 시 소켓 닫고 프로그램 종료
{
printf("send Error.\n");
closesocket(sockServer);
return -1;
}
printf("sent.\n");

/* 받을 때 */
printf("receiving...\n");
status = recv(sockServer, buffer, sizeof(buffer), 0);
if (status == SOCKET_ERROR)
{
printf("recv Error.\n");
closesocket(sockServer);
return -1;
}
printf("received.\n");