삽질의 현장/- 네트워크 프로그래밍

#008_Window_Network_클라이언트 서버 통신 (TCP 클라이언트)

shovelman 2015. 10. 3. 17:51


안녕하세요 삽잡이입니다.


이번 시간에는 지난시간에 이은 TCP 클라이언트에 대해서 알아보려고합니다.




클라이언트는 가장 먼저 socket()함수를 통해 통신하기 위한 수단인 socket을 생성해야합니다.

그 다음 클라이언트는 자신이 원하는 서버에 접속을 해야합니다.

따라서, connect()함수를 제공해줍니다. 서버와 연결하기 위해서 필요한 함수이지요...

해당 함수 안에는 일반적으로

어떤 프로토콜 체계를 사용할지, 어떤 IP를, 어떤 포트를 사용하겠다는 정보를 포함시켜야합니다.


socket() 함수까지는 통신 소켓이 아니지만, connect()함수가 성공하게 되면 통신 소켓이 됩니다.

참고로, 클라이언트는 서버가 아니기 때문에 대기 소켓이 없습니다.

단지, 통신 소켓을 가지고 있을 뿐이지요...

통신 소켓도 여러개를 가지고 있지 않고 일반적으로 하나를 가지고 있습니다.


이미지를 보내는 것과 같은 정말 속도가 느린 작업을 게임 안에서 병행해야한다고 생각해봅시다.

그럴 때에는 통신 소켓이 여러개 있을 수 도 있겠지요...

뭔말인지 차근 차근 설명해보겠습니다...

게임을 하면서 이미지 같은 데이터를 넘겨주고 싶다면 데이터를 받는 동안 아무것도 못하니깐

소켓을 늘려서 한 놈은 데이터만 받고, 한놈은 게임을 진행하는 소켓을 만드는 것입니다.

이를 채널을 늘린다고들 얘기합니다. 소켓을 늘리는 것이지요...


아무튼... connect() 함수가 성공을 하면 recv(), send() 함수를 수행하게 되는 것입니다.

통신을 그만하고 싶다거나, 문제가 발생하기 전까지는 무한 루프를 돌며 작업을 수행하겠지요.

그러다가 통신을 다 끝내면 마무리 작업을 위해 closesocket() 함수를 사용하는 것이구요...


이게 TCP 클라이언트가 하는 일입니다.


클라이언트는 소켓이 하나이고, 한놈만 대화를 하지 않습니까?

일반적으로 그래서 쓰레드 하나로 얼마든지 작업을 수행할 수 있습니다.


서버는 최소한 독립적으로 동작할 작업들이 여러개이기 때문에,

쓰레드가 한 대일 수가 없습니다. 

그래서 이와 같은 서버를 TCP 다중 처리 서버라고 부르는 것이구요...


다중 처리 서버는 항상 쓰레드가 굉장히 많아야할까요?

아닙니다. 그래서 우리가 공부하고 있는 클라이언트 서버 모델을 포함한,

네트워크 모델이 만들어진 것입니다.

즉, 굳이 쓰레드를 여러개 만들지 않고도 다중 처리를 할 수 있는 여러가지 방법을

제공해준다 이겁니다.


다른 OS에서는 처리하는 방식이 두 가지 정도입니다.

비동기, 쓰레딩 처리입니다..


하지만 Windows 에서는 6가지 정도나 됩니다.

쓰레드, Selected, 이벤트, 어버럽트, IOC 모델 등등 으로 말입니다.


각 영역에 맞도록 모델들이 제공될 것입니다.

그런데, 어떤 플렛폼에 가더라도 쓰레드는 있습니다.

따라서 쓰레딩 모델은 똑같다는 것입니다.


가장 기본적인 모델이 쓰레딩 모델이라는 것이지요...


다음시간부터는 실제 코드를 보며 TCP 서버와 클라이언트간 통신에 대해서 알아보겠습니다.


이상 삽잡이였습니다!