반응형

소켓의 생성(4-1) 

 

 

앞에서 배운 TCP 소켓의 데이터의 경계가 없다 라는 특징을 확인해보자.

 

먼저 아래 실행 결과 사진이다.

 

-

 

 

-

 

위의 사진을 보면 클라이언트 측에서 Hello World!라는 문장을 

 

13번의 read 함수 호출로 읽어왔다.

 

그렇다면 먼저 TCP 소켓 서버 측의 코드이다.

 

-

 

server.c
0.00MB

 

 

 

 

-

 

우리가 처음에 봤던 server 프로그램의 코드랑 동일하다.

 

이제 클라이언트 코드를 봐보자.

 

-

 

tcp_client.c
0.00MB

 

 

 

-

 

서버 측 코드와 달리 클라이언트 측의 코드는 살짝 변형되었다.

 

바로 read함수를 while문으로 여러번 호출하는 것이다.

 

이제 핵심 의미를 알아보자.

 

-

 

24번째 줄 : TCP 소켓을 생성하고 있다.

 

첫 번째 인자와 두 번째 인자로 각각 "PF_INET", "SOCK_STREAM" 이 전달되면 세 번째 인자인 IPPROTO_TCP는 생략 가능하다.

 

-

 

33번째 줄 : while문 안에서 read 함수를 반복 호출하고 있다.

 

중요한 것은 이 함수가 호출될 때마다 1 바이트씩 데이터를 읽어 들인다는 점이다. 

 

그리고 read 함수가 0을 반환하면 이는 거짓을 의미하므로 while문을 빠져나간다.

 

-

 

38번째 줄 : 이 문장이 실행될 때 변수 read_len에 저장되어 있는 값은 항상 1이다.

 

33번째 줄에서 1바이트씩 데이터를 읽고 있기 때문이다.

 

결국 while문을 빠져나간 이후에 str_len에는 읽어들인 바이트 수가 저장된다.

 

-

 

즉, 서버는 1번 데이터를 전송하지만 클라이언트는 1바이트씩 13번에 걸쳐서 받는다.

반응형

+ Recent posts