원격 제어 프로그램 6. 원격 제어 요청 수신 서버

원격 제어 요청을 수신하는 SetupServer 클래스도 정적 클래스로 정의합시다.

서버 측은 연결 요청을 수신하기 위한 Listening 소켓을 생성하는 부분과 연결 요청을 대기하고 수용하는 부분으로 나눌 수 있습니다. 특히 연결 요청을 대기하고 수용하는 부분은 무한 반복할 것으로 블로킹을 막기 위해 여기에서는 스레드를 사용할게요.

Listening 소켓을 멤버로 선언합시다.

무한 대기하는 부분의 스레드를 멤버로 선언합시다.

연결 요청이 왔을 때 이벤트 처리를 위해 RecvRCInfoEventHandler 형식의 이벤트를 멤버로 선언하세요.

Setup서버를 시작하는 메서드에서도 IP 주소와 포트 번호를 입력 인자로 받습니다.

먼저 TCP 소켓을 생성합니다.

소켓과 IPEndPoint를 결합하고 Back 로그 큐 크기를 설정하세요.

연결 요청을 대기하고 수용하는 스레드를 생성하고 시작합니다.

다음은 연결 요청을 대기하는 메서드를 작성합시다.

연결 요청을 대기하고 수용하는 부분 Listen 소켓의 Accept 메서드를 호출는 것을 반복합니다.

연결 요청을 수신하는 이벤트 핸들러가 있다면 이벤트 인자를 생성하여 이벤트를 발생합니다.

연결 요청을 수신하였는지 알 수 있게 이벤트를 발생했으니 do_sock은 닫습니다.

SetupServer를 종료할 수 있게 Close 메서드를 정의합시다.

소켓을 해제화 작업을 수행합니다.

다음은 이번 실습에서 작성한 소스 코드입니다.

이 책에서는 비동기적인 요소를 스레드로 작성하고 있습니다. 소켓의 비동기 메서드를 이용하여 프로그래밍하면 보다 나은 형태로 작성할 수 있습니다. 그 부분은 여러분의 몫으로 남길게요.