728x90

제대로된 에코 클라이언트

- 이전 챕터의 에코 클라이언트 코드는 문제가 있을 수 있음

 

열혈 TCP/IP 04-3. Iterative 서버

Iterative 서버 - 다수의 클라이언트에 서비스를 제공할 수 있는 서버 - 접속한 클라이언트의 소켓을 close 후 다시 accept하여 다른 클라이언트와 연결해 데이터를 송수신하는 구조 - 1:N으로 통신할

1d1cblog.tistory.com

- 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

+ Recent posts