본문 바로가기

멀티쓰레드 윈도우즈 소켓 프로그래밍 #5– 멀티쓰레드 프로그래밍 2 4. 멀티쓰레드 프로그래밍 2 실제 에코 서버 제작은 지난 강좌에서 끝났다. 이제 멀티 쓰레드 윈속 프로그래밍을 마무리하며 LXSCK 클래스를 한번 들여다 보고자 한다. 지난 강좌에서 잠시 언급하였 듯이 LXSCK 클래스는 소켓 통신을 위한 클래스이다. 이 클래스는 클래스가 생성되면서 2개의 부가적인 쓰레드를 생성한다. 각자의 쓰레드는 소켓을 읽거나 쓰는 데 쓰이며 소켓에 읽을 데이더가 있으면 버퍼가 허용하는 만큼의 데이터를 가져와 내부버퍼에 쌓아놓는다. 그러면 ReadLine() 또는 ReadDate() 멤버함수가 데이터를 읽어가게 된다. 쓰는 과정도 비슷하다. SendLine() 또는 SendData() 함수가 데이터를 버퍼에 쌓아놓으면 그 내용을 소켓을 통해서 보낸다. 실제적으로 쓰기 작업은 이렇게.. 더보기
멀티쓰레드 윈도우즈 소켓 프로그래밍 #4 – 멀티쓰레드 프로그래밍 3. 멀티쓰레드 프로그래밍 이제 드디어 실제 에코서버에대해 설명해보기로 한다. 이 초간단 서버프로그램은 단순히 입력을 받은 문자열 그대로를 출력해 주는 것으로서 가장 기초적인 서버 프로그램이라고 할 수있다. 이 프로그램을 분석하기 위해 먼저 소스를 참조하기 바란다. 소스를 들여다 보면 이전의 서비스 프로그램 예제에 3개의 클래스가 추가된 것을 알 수 있을 것이다. 각 클래스는 다음과 같다. LXSCK – 윈속 통신을 위한 모듈. 서버/클라이언트에서 사용가능한 공통모듈로서 컨넥션 기능은 없고 통신 기능만 있다. 통신을 위해 2개의 thread(read/write)를 생성하여 사용한다. LXSERVER – 서버용으로 윈속을 초기화하고 클라이언트로부터 접속을 기다린다. 접속이 있을 경우 그 접속을 받아들인 후.. 더보기
멀티쓰레드 윈도우즈 소켓 프로그래밍 #3 – 윈도우즈 서비스 프로그래밍 2. ServiceMain 과 서비스 제어 처리자(ServiceCtrlHandler) 윈도우즈 NT 서비스프로그램은 WinMain() 이외에 2개의 다른 함수를 윈도우에 export 하여야 한다. 그중 하나가 ServiceMain() 함수로서 이 이름은 고정된 것이 아니다. 지난 강좌에서 보았던 WinMain() 함수의 제일 마지막 부분에 서비스 제어자로서 등록하는 부분이 있는 데 이때 ServiceMain() 함수의 이름을 서비스 제어 관리자(SCM-Service Control Manager)에 등록한다. SERVICE_TABLE_ENTRY DispatchTable[] = { { ECHOSVC_NAME, ServiceMain }, { 0, 0 } }; if ( argc < 2 ) { if ( !Star.. 더보기