소켓의 생성(4-1)
앞에서 배운 TCP 소켓의 데이터의 경계가 없다 라는 특징을 확인해보자.
먼저 아래 실행 결과 사진이다.
-
-
위의 사진을 보면 클라이언트 측에서 Hello World!라는 문장을
13번의 read 함수 호출로 읽어왔다.
그렇다면 먼저 TCP 소켓 서버 측의 코드이다.
-
-
우리가 처음에 봤던 server 프로그램의 코드랑 동일하다.
이제 클라이언트 코드를 봐보자.
-
-
서버 측 코드와 달리 클라이언트 측의 코드는 살짝 변형되었다.
바로 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번에 걸쳐서 받는다.
'시작하지 말았어야 했던 것 > (Unix, Linux) C Socket' 카테고리의 다른 글
(리눅스) 소켓의 구분에 활용되는 PORT번호 (0) | 2021.02.02 |
---|---|
(리눅스) 인터넷 주소(Internet Address) (0) | 2021.02.02 |
(리눅스) 소켓의 생성(4) 프로토콜의 마지막 정보 전달 (0) | 2021.02.02 |
(리눅스) 소켓의 생성(3) 비 연결지향형 소켓(UDP 소켓)(SOCK_DGRAM) (0) | 2021.02.02 |
(리눅스)소켓의 생성(2-1) 소켓에 존재하는 버퍼 내의 데이터 (0) | 2021.02.02 |