원격 제어 프로그램 9. 원격 제어 – 화면 수신 서버

원격 제어 컨트롤러는 원격 제어 호스트의 화면을 주기적으로 수신하여 이를 보면서 제어합니다. 이제 원격 제어 화면을 수신하는 ImageServer 클래스를 구현합시다.

먼저 Listen 소켓과 연결 요청을 대기하고 수용하는 부분을 위한 스레드를 멤버로 선언합시다.

이미지를 수신할 때 이벤트 처리를 위해 RecvImageEventHandler 형식의 이벤트를 선언합시다.

생성자에서는 IP와 포트 정보를 받습니다.

TCP 소켓을 생성하세요.

소켓과 IP 단말 개체와 결합하고 백로그 큐를 설정합니다.

클라이언트 연결 요청을 대기하고 수락하는 스레드를 생성하고 시작합니다.

연결 요청을 대기하고 수락하는 AcceptLoop 메서드를 구현합시다.

클라이언트 연결 요청을 대기하고 수락하는 부분은 무한 반복합니다.

Listen 소켓의 Accept 메서드를 호출하여 이미지를 수신할 작업 소켓을 구합니다.

작업 소켓에서 이미지를 수신합니다.

작업 소켓에서 이미지를 수신하는 Receive 메서드를 구현합시다.

이미지 길이를 수신합니다.

수신한 이미지 길이만큼의 버퍼를 생성합니다.

수신한 이미지 길이만큼의 이미지 데이터를 수신합니다.

이미지 수신 이벤트에 등록 개체가 있으면 이미지 수신 이벤트를 발생합니다.

수신한 버퍼를 이미지로 변환하여 이벤트 인자를 생성합니다.

이미지를 수신한 이벤트를 발생합니다.

이미지를 수신하였으니 작업 소켓을 닫습니다.

수신한 이미지 버퍼를 이미지로 변환하는 ConvertBitmap 메서드를 구현합시다.

byte 배열을 이미지로 변환하기 위해 메모리 스트림 개체를 생성합니다.

메모리 스트림 개체에 수신한 이미지가 있는 버퍼의 내용을 기록합니다.

메모리 스트림 개체로 비트맵 개체를 생성하여 반환하세요.

이미지 서버를 닫는 메서드도 제공합시다.

이미 닫혀있을 수도 있으니 존재할 때만 닫습니다.

소켓을 닫았으면 다시 Close 메서드를 호출하여도 아무 작업을 하지 않게 null로 설정하세요.

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