Iterative 에코 서버
먼저 Iterative 기반의 에코 서버 코드를 봐보자.
accept 함수 부분이 어떻게 반복되는지 잘 보자.
-
-
45 ~ 58 행 : 총 5개의 클라이언트에게 서비스를 제공하기 위한 반복문이다.
결과적으로 accept 함수가 총 5회 호출되어
총 5개의 클라이언트에게 순서대로 에코 서비스를 제공한다.
-
54 ~ 55 행 : 실제 에코 서비스가 이뤄지는 부분이다.
읽어 들인 문자열을 그대로 재전송한다.
-
57 행 : 소켓을 대상으로 close 함수가 호출되면
연결되어있던 상대방 소켓에게 EOF가 전달된다.
즉, 클라이언트 소켓이 close 함수를 호출하면
54 행의 조건은 '거짓(false)'이 되어서 57 행이 실행된다.
-
59 행 : 총 5개의 클라이언트에게 서비스를 제공하고 나면
마지막으로 서버 소켓을 종료하면서 프로그램을 종료한다.
-
※ echo server 실행결과 ※
-
-
위 사진의 실행결과에서 보이듯이 클라이언트와의 연결 정보가 출력되도록 예제가 작성되어 있다.
위 사진의 실행결과는 현재 3번 째 클라이언트와 연결된 상황을 보이고 있다.
이때 주의할 점은 쓰레드를 이용한 통신처럼 동시 서비스 제공이 아니라
1번째 클라이언트가 서비스를 종료하면
2번째 클라이언트가 서비스를 이용하고
2번 째 클라이언트가 서비스를 종료하면
3번째 클라이언트가 서비스를 이용하는
순차적 접속 방식이다.
즉, 이미 접속되어 있는 클라이언트와의 연결이 끊겨야 다른 클라이언트가 접속할 수 있다는 것이다.
서버 입장에서는 들어온 순서대로 연결 요청을 수락한다.
-
참고로
위의 코드는 이전에 봤던 코드와는 살짝 다른데
그 이유는 if문으로 오류 체크를 하고 있기 때문이다.
"이러한 형식으로 if문을 사용해 오류 체크를 하는구나"라고 익혀두면 된다.
'시작하지 말았어야 했던 것 > (Unix, Linux) C Socket' 카테고리의 다른 글
(리눅스) echo 클라이언트의 문제점 (0) | 2021.02.03 |
---|---|
(리눅스) Iterative 에코 클라이언트 (0) | 2021.02.03 |
(리눅스) Iterative 기반의 서버, 클라이언트 구현 과정 (0) | 2021.02.03 |
(리눅스) TCP 기반 Server, Client의 함수호출 관계 (0) | 2021.02.03 |
(리눅스) Client 프로그램 분석 (0) | 2021.02.03 |