728x90
제대로된 에코 클라이언트
- 이전 챕터의 에코 클라이언트 코드는 문제가 있을 수 있음
- TCP는 데이터의 경계가 없기 때문에 전송할 때 나눠서 전송이 되어도 문제가 되지 않음
- 에코 클라이언트는 문장 단위로 데이터를 송수신하기 때문에 데이터의 경계를 구분해야 함
- 클라이언트는 write(send)한 데이터의 크기만큼 데이터가 들어올 때까지 read(recv)를 해서 한번에 제대로된 문장을 출력할 수 있게 해야함
int main()
{
...
str_len=write(sock, message, strlen(message));
recv_len=0;
while(recv_len<str_len)
{
recv_cnt=read(sock, &message[recv_len], BUF_SIZE-1);
if(recv_cnt==-1) {
printf("read() error!");
}
recv_len+=recv_cnt;
}
message[recv_len]=0;
printf("Message from server: %s", message);
}
728x90
'Programming > Network' 카테고리의 다른 글
열혈 TCP/IP 06-1. UDP에 대한 이해 (0) | 2021.02.16 |
---|---|
열혈 TCP/IP 05-2. TCP의 이론적인 이야기 (0) | 2021.02.14 |
열혈 TCP/IP 04-3. Iterative 서버 (0) | 2021.02.14 |
열혈 TCP/IP 04-2. TCP 기반 서버와 클라이언트의 구현 (0) | 2021.02.14 |
열혈 TCP/IP 04-1. TCP와 UDP에 대한 이해 (0) | 2021.02.14 |