Table of Contents
목차
서버-클라이언트 프로그래밍
일반적으로 서버-클라이언트 모델은 네트워크 서비스를 제공하는 서비스 제공자와 서비스 이용자 사이의 관계를 표현한다.
- 서버 프로세스: 서비스를 제공하는 프로그램
- 클라이언트 프로세스: 서버와 연결을 시도하여 서비스를 제공받는 프로그램
연결형 서비스(TCP)
소켓은 네트워크 통신을 위한 소프트웨어 교신점이 된다.
두 개의 독립 프로세스가 네트워크를 통해 통신하려면 논리적인 연관 관계를 맺어주는 소켓이 필요하다.
소켓을 이용한 전형적인 서버-클라이언트 프로그램을 작성하는 방법은 다음과 같다.
서버와 클라이언트의 동작
[서버의 동작과정]
서버 프로세스는 다수의 클라이언트에 공개되는 Well-known 포트로 자신의 소켓 주소를 설정한 후에, 클라이언트의 연결 요청을 기다린다.
클라이언트 요구에 따라 연결이 설정되면 서버 프로세스가 제공하는 서비스가 시작된다.
이러한 서비스는 여러 클라이언트에 반복적으로 이루어지며, 동작 과정은 다음과 같다.
❶ 서비스 교신점(호스트의 IP 주소, 포트 번호) 공개
❷ 클라이언트로부터 발생하는 서비스 요구 대기
❸ 클라이언트에 서비스 제공
❹ 해당 클라이언트에 서비스 제공 완료
❺ 단계 ❷로 이동
[클라이언트의 동작과정]
클라이언트 프로세스는 서버의 Well-known 포트를 이용해 원하는 서버와 접속을 시도하고, 연결이 이루어지면 서버가 제공하는 서비스를 이용한다.
❶ 원하는 서비스를 제공하는 서버 확인
❷ 해당 서버와 연결 시도
❸ 서버에 서비스 요청
❹ 서비스 이용 완료
비연결형 서비스(UDP)
연결형 서비스에서 설명한 예제 프로그램을 비연결형으로 변형해보자.
- 서버에 연결 요청
connect( )
와 연결 요청 대기accept( )
함수로 연결을 설정하는 과정이 생략 - 데이터 송수신을 위한
send( )
,recv( )
함수 대신에sendto( )
,recvfrom( )
함수를 사용 - 비연결형 서비스에서는 전송 데이터마다 수신자의 소켓 주소를 함께 전송한다.