2013.07.05 11:25


이제부터 프로그래밍이라는걸 시작해 보도록 하겠습니다.

대부분 프로그래밍의 처음이 그렇듯이 소켓 프로그램도 마찬가지로 간단한 문자열(Hello World)을 네트워크상에서 출력해 보는 것으로 시작하도록 하겠습니다.

일반적으로 소켓 프로그램은 서비스를 요청하는 클라이언트와 클라이언트의 요청을 받아 서비스하는 서버로 구성됩니다.

지금부터 구현할 소켓 프로그램은 클라이언트 프로그램이 네트워크상에서 통신 채널을 통해 서버측에 연결되면 서버 프로그램이 즉시 문자열을 클라이언트측에 전송하고, 클라이언트 프로그램은 전송받은 문자열을 화면에 출력합니다.

그럼 먼저 서버 프로그램을 구현해 보도록 하겠습니다.
서버 프로그램은 시작 버튼 하나와 상태를 알려주는 스태틱 텍스트로 구성되고, 사용자가 시작 버튼을 누르면 서버가 클라이언트와의 연결을 기다리는 ‘Server Start’라는 상태를 알리게 됩니다.

MFC로 서버 프로그램을 구현할 때 다음의 순서로 진행하도록 하겠습니다.

1 응용 프로그램 마법사로 프로젝트를 만듭니다.
2 소켓으로 사용할 CSocket::CListenSocket과 CSocket::CServiceSocket 객체를 생성합니다.
3 GUI를 설계하고, 각각의 컨트롤에 대해 멤버 함수와 멤버 변수를 추가하고 코딩합니다.
4 클라이언트 프로그램과 연결해서 서버로서의 기능을 검증합니다.

서버 프로그램을 구현하기 위해서 먼저 프로젝트를 생성하겠습니다.
대화 상자 기반으로 고급기능에서 ‘Window 소켓’을 체크하여 프로젝트를 생성합니다.
프로젝트 이름은 HelloServer로 하겠습니다.

저는 Visual Studio 2008을 사용하였습니다.

응용 프로그램 종류에서 대화 상자 기반으로 선택합니다.

고급기능에서 Window 소켓 항목을 체크하고 프로젝트를 생성합니다.

다음으로 소켓 객체(CSocket::CListenSocket과 CSocket::CServiceSocket)의 생성하겠습니다.
CListenSocket 객체는 클라이언트로부터의 연결 요청을 받아들이는 역할을 합니다. 이 객체는 클라이언트의 연결 요청을 받으면 OnAccept 메시지 처리기가 실행되어 연결 요청을 처리합니다.

먼저 MFC 클래스 마법사를 이용하여 CSocket 클래스를 기본클래스로 해서 CListenSocket 객체를 생성합니다.


CListenSocket 객체는 HelloServer 프로젝트의 주 대화 상자 객체와 서로 자료나 메시지를 주고 받으면서 작업해야 합니다. 따라서 프로젝트의 이름으로 HelloServer를 사용하기 때문에 주 대화 상자 객체의 이름은 CHelloServerDlg가 됩니다.

CHelloServerDlg 객체의 시작 버튼을 누르면 CListenSocket 객체를 새로 생성하게 됩니다. CListenSocket 객체로 클라이언트로부터의 연결 요청이 오면, OnAccept 메시지 처리기가 실행되지만 OnAccept 메시지 처리기에서 클라이언트의 연결 요청을 처리하지 않고, 이를 대화 상자 CHelloSeverDlg로 객체로 전달해서 처리하게 됩니다. 따라서 CHelloSeverDlg CListenSocket는 서로의 객체에 대한 주소를 주고 받습니다.

CListenSocket.h 파일을 다음과 같이 작성합니다.

소스 설명은 주석으로 대신 하도록 하겠습니다.

헤더 파일의 작성이 끝났습니다.

다음으로 CListenSocket.cpp을 다음과 같이 구현하겠습니다.

CListenSocket에 대한 준비가 끝났습니다.

다음으로 CListenSocket 객체를 이용하여 클라이언트로부터의 연결 요청을 받아들이고 해당 클라이언트에 대한 처리를 수행할 CServiceSocket 객체를 생성합니다.

CServiceSocket 객체 역시 HelloServer 프로젝트의 주 대화 상자인 CHelloServerDlg 객체와 자료를 송수신하기 위해 서로의 객체에 대한 주소를 주고 받습니다.

ServiceSocket.h을 다음과 같이 작성합니다.

ServiceSocket.cpp을 다음과 같이 구현합니다.

다음으로 GUI설계와 컨트롤에 대한 멤버 함수와 멤버 변수를 추가하도록 하겠습니다.
GUI를 다음과 같이 구성합니다.

HelloServer.h를 작성하도록 하겠습니다. 시작 버튼을 누르면 수행하는 OnBnClickedButtonConnect 메소드를 작성합니다.

CHelloServerDlg.cpp을 다음과 같이 구현합니다.

Hello World를 출력하기 위한 서버프로그램의 준비가 끝났습니다.

이제 빨리 클라이언트 프로그램을 만들어 서버 프로그램과 서로 잘 동작하는지 확인는 일만 남았습니다.

클라이언트 프로그램은 다음 시간에~^^;

그럼 오늘은 여기까지 입니다.

수고하셨습니다.

이 글은 열혈강의 Visual C++ 2008 MFC 윈도우 프로그래밍, 정석용의 TCP/IP 소켓 프로 그래밍 책을 참고하여 작성되었습니다.





Posted by injunech