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

#003_Window_Network_ 윈도우 소켓 초기화 및 종료

shovelman 2015. 10. 2. 16:30


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


이번 시간에는 기본적으로 네트워크 프로그래밍에 

도움이 될만한 것들을 찾아서 알아보도록 하겠습니다.


네트워크 프로그래밍을 하면서 가장 기초적인 작업은

바로, 윈도우 소켓을 장착시키는 것입니다. 너무도 당연하지요....


윈도우 소켓도 종류가 많은데 가장 최신버전은 2.2버전입니다. 그 헤더는 winsock2.h이지요...

이전 시간에 언급을 했었습니다. 

윈도우 소켓을 사용한다는 것은 다른 PC와의 통신이 가능한 프로그램을 만들기 위해서라구요...

우리가 통신을 하며 데이터를 주고 받는데 OS의 역할이 필요한데,

OS가 역할을 하기 위해서는 통신을 위한 네트워크 lib가 필요하다고 했었습니다.

물론 모든 기능들은 DLL 파일에 있겠지만, DLL의 암묵적인 연결을 지원하는 라이브러리 말입니다.


즉, 진짜 내용물은 ws2_32.dll 이라는 놈인데

우리는 [프로젝트 속성] > [링커] > [입력] 에서 ws2_32.lib 이놈을 추가하면 됩니다.

진짜 내용물을 실행시켜줄 스텁 코드가 들어있는 놈을 장착 시키는 것입니다.



비로소, 모든 네트워크 프로그래핑 통신을 위한 준비가 끝났습니다.


우리는 라이브러리를 사용하기 위해 라이브러리(ws2_32.dll)초기화를 시행해야합니다.

바로, WSAStartup 이라는 함수입니다.



이 함수는 반드시 호출해줘야합니다. (참고로 WSA는 Window Socket Api 라는 뜻입니다.)

아무튼... 해당 함수에는 두 가지의 인자가 필요합니다.

순차적으로 in 파라메터와 inout 파라메터입니다.



이런식으로 사용을 합니다.

처음 인자는 윈도우 소켓 2.2 버전임을 명시하는 것입니다.

즉, 라이브러리를 사용하는데 윈도우 소켓 2.2를 사용하겠다는 뜻이지요...


두번째 인자는 실제 2.2 버전이 사용됬는지 아닌지에 대한 정보를 받아옵니다.

WSADATA 구조체를 전달하게 되면 해당 버전 정보를 가져오게 되는 것입니다.


정리하자면, 해당 함수는 네트워크 프로그램에서 사용할 윈속 버전을 요청하여

윈도우 소켓 라이브러리를 초기화하는 역할을 한다는 것입니다.


그리고 다 사용을 하게 되면 즉, 프로그램을 종료할 때에는 

WSACleanup 함수를 통해 마무리 작업을 해야합니다.

즉, Window Socket 사용을 중지함을 운영체제에 알려서 리소스를 반환하는 역할을 하지요...

 

지금까지 윈도우 소켓 헤더를 추가하여 라이브러리르 장착하고 시작과 마무리를 알아봤습니다...


만약 WSAStartup 함수와 Cleanup 함수를 사용하지 않는다면,

실질적으로 소켓이 열리지도 않고, 생성하는 부분도 실패하고,

통신이라던지 모든 함수의 기능이 마비가 됩니다.