반응형

Client 프로그램의 기본적인 함수 호출 분석

 

 

이전 포스팅에서 Server 프로그램을 분석해보았다.

 

이젠 Client 프로그램을 분석해 볼 차례이다.

 

하지만 먼저 Client 프로그램의 함수호출 순서를 다시 봐보자.

 

클라이언트의 구현과정은 서버보다 훨씬 간단하다.

 

-

 

1. 소켓의 생성

 

2. 연결의 요청

 

-

 

위 2가지 과정만 거치면 전부이다.

 

-

 

 

-

 

서버의 구현과정과 비교해서 차이가 있는 부분 연결요청이라는 과정이다.

 

이는 클라이언트 소켓을 생성한 후에 서버로 연결을 요청하는 과정이다.

 

서버는 listen 함수를 호출한 이후부터 연결요청 대기 큐(방)를 만들어 놓는다.

 

그렇기에, 그 이후부터 클라이언트는 연결 요청을 할 수 있다.

 

클라이언트는 아래의 함수를 이용해 연결요청을 할 수 있다.

 

-

 

 

 

-

 

클라이언트에 의해서 connect 함수가 호출되면 다음 둘 중 한가지 상황이 되어야 함수 호출이 완료된다.

 

-

 

1. 서버에 의해 연결요청이 접수된 경우

 

2. 네트워크 단절 등 오류상황이 발생해서 연결 요청이 중단된 경우

 

-

 

위에서 말하는 연결요청의 접수는 서버의 accept 함수 호출을 의미하는 것이 아니라

 

클라이언트의 연결 요청 정보가 서버의 연결 요청 대기 큐에 등록된 상황을 의미한다.

 

그렇기에 connect 함수호출이 완료되어도 바로 서비스가 이뤄지지 않을 수도 있다.

 

-

 

※ 클라이언트 소켓의 주소정보는 어디 ※

 

 

서버를 구현하면서 반드시 거쳤던 과정 중 하나가 서버 소켓에 IP와 PORT번호를 할당하는 것이었다.

 

하지만 클라이언트 프로그램의 구현순서에는 소켓의 주소 할당 과정이 없었다.

 

그저 소켓을 생성하고 서버로의 연결을 위해서 connect 함수를 호출한 것이 전부이다.

 

물론 클라이언트 소켓도 네트워크를 통해 데이터를 송수신하려면 IP와 PORT번호가 할당되어야 한다.

 

다음과 같이 정리할 수 있다.

 

-

 

connect 함수가 호출될 때 운영체제(커널)에서 host 컴퓨터에 할당된 IP와 

 

임이의 PORT번호를 부여한다.

 

-

 

즉, bind 함수를 통해서 소켓에 IP와 PORT번호를 직접 할당하지 않아도

 

connect 함수 호출 시 자동으로 소켓에 IP와 PORT번호가 할당된다.

 

그래서 클라이언트 프로그램을 구현할 때에는 bind 함수의 호출이 필요 없다.

 

반응형

+ Recent posts