소켓 프로그래밍 3 - Accept

프로그래밍 2022. 6. 22. 08:36

앞서 아래의 내용을 알아 보았습니다. 

1. 서버측 소켓 준비와 Listening

https://dicomis.tistory.com/37

 

Socket Programming 1 - binding

요즘은 대부분 Socket 자체를 이용해서 programming 하시는 분은 많이 없을 거라고 생각합니다. 하지만 대부분의 software가 network상에서 동작을 하고 있으니 모두 socket을 이용하고 있다고 봐도 되겠습

dicomis.tistory.com

2. 클라이언트측 소켓 생성과 연결 요청

https://dicomis.tistory.com/39

 

Socket Programming 2 - Client와 Port Range

앞의 글에서 서버 측의 Listen 까지의 과정을 살펴보았습니다. 서버가 Port 하나를 열고 Listen하고 있는 상태에서 Client는 연결 요청할 수 있습니다. Client 가 서버와 연결되는 과정을 보겠습니다. Clie

dicomis.tistory.com

 

이제는 클라이언트의 연결 요청을 서버측에서 수락하는 과정만 남았네요.

 

Accept

서버가 클라이언트의 연결 요청을 받으면 서버는 socket을 하나 더 생성합니다.

서버 입장에서는 연결되는 클라이언트가 많아질 수 있으니 Child socket 을 만들어서 연결시켜 주고 그 이후로는 연결된 socket끼리 통신을 하도록 하는 것입니다.

 

즉, 아래 그림과 같이 서버 socket은  새로운 클라이언트의 연결 요청을 대기하고 수락하는 역할을 하게되고 child socket들은 각각 연결된 클라이언트들과 통신을 하게 됩니다.

서버 socket을 이용하면, 예들 들어 클라이언트 5개만 연결 시키고 더 이상은 거부하도록 할 수 있겠죠.

위의 그림의 예에서는 서버측의 Socket들(Server socket, Child socket)은 모두 80 이라는 port를 사용하고 있습니다. 즉, 서버측의 Child socket들은 아무리 많아져도 별도의 port 가 따로 할당되지는 않습니다.

 

그런데 위 그림처럼 Client socket B와 C가 같은 PC에서 동작하고 있다고 가정해 봅시다. 그러면 서버로 전달되는 Message B와 Message C는 동일한 Address에서 전달되어 오는데 어떻게 구별이 되어서 각각 Child socket B와 C에게 전달이 되는 것일까요?

그것은 Message가 전달될 때에 데이터그램 packet안에 각자의 address 및 port 번호와 연결된 상대의 port 번호가 실려서 보내지기 때문에 구분이 되는 것입니다.

 

 

Close

Socket을 다 사용하고 나면 Close를 호출해서 상대편 socket 역시 close되도록 해야 합니다.

그렇지 않으면, 예를 들어 컴퓨터가 전원이 나간다던지 LAN cable을 뽑아 버린다던지 하게되면 상대편 Socket은 연결이 불가능한 상태라는 것을 알지 못하게 됩니다.

 

 

 

다음 부터는 Data가 어떻게 전송 되는지 알아 보겠습니다.

 

TO BE CONTINUED...

728x90
반응형

'프로그래밍' 카테고리의 다른 글

Network Byte Ordering  (0) 2022.06.23
소켓 프로그래밍 4 - Data Boundary  (0) 2022.06.23
소켓 프로그래밍 2 - Client와 Port Range  (0) 2022.06.21
소켓 프로그래밍 1 - binding  (0) 2022.06.19
DI, DIP 그리고 IOC  (0) 2022.06.15
admin