Universidad de Magallanes

Investigación


Dirección de Investigación


facebook twitter youtube
02 de agosto del 2019

mailslot 예제

메일 슬롯은 서버-클라이언트 인터페이스로 작동합니다. 서버는 Mailslot을 만들 수 있으며 클라이언트는 이름으로 메일 슬롯을 작성할 수 있습니다. 이러한 메일 슬롯은 단방향 통신 메커니즘을 나타내므로 서버만 메일 슬롯을 읽을 수 있습니다. 서버-클라이언트 인터페이스는 로컬 또는 네트워크를 통해 통신하는 두 프로세스로 구성될 수 있습니다. 메일 슬롯은 RPC 프로토콜을 통해 작동하며 동일한 네트워크 도메인의 모든 컴퓨터에서 작동합니다. 메일 슬롯은 메시지가 수신되었는지 확인하지 않습니다. 메일 슬롯은 일반적으로 한 클라이언트 프로세스가 여러 서버 프로세스에 메시지를 브로드캐스트해야 하는 경우에 적합합니다. Windows 95, Windows 98 및 Windows Me 플랫폼도 I/O 요청을 차단하는 데 문제가 있습니다. 메일 슬롯 서버는 ReadFile() 기능을 사용하여 데이터를 수신합니다. MAILSLOT_WAIT_FOREVER 플래그로 메일 슬롯을 만든 경우 데이터를 사용할 수 있게 될 때까지 읽기 요청이 무기한 차단됩니다. 미해결 ReadFile() 요청이 있을 때 서버 응용 프로그램이 종료되면 응용 프로그램이 영원히 중단됩니다. 응용 프로그램을 취소하는 유일한 방법은 Windows를 재부팅하는 것입니다. 가능한 해결책은 서버가 별도의 스레드에서 자체 메일 슬롯에 대한 핸들을 열고 차단 읽기 요청을 중단하기 위해 데이터를 보내는 것입니다.

다음 코드는 이 솔루션을 자세히 보여 줍니다. SMB: 일반적으로 Mailslot은 SMB를 전송 프로토콜로 사용합니다. 첫 번째 클래스인 CMailslot은 메일 슬롯의 기본 을 캡슐화하는 추상 기본 클래스입니다. Mailslot 디스섹터는 (완전히 기능, 부분적으로 기능, 기존, … 현재 상태가 무엇이든). 또한 이 프로토콜의 특수 통계와 같이 적절한 경우 추가 Wireshark 기능에 대한 정보를 추가합니다. 클라이언트와 서버 프로그램 예제를 모두 테스트해 보겠습니다. 먼저 서버 프로그램을 실행합니다. 세 번째 아르그는 GetMailslotInfo가 다음 레코드의 크기(바이트)를 반환하도록 하려는 DWORD에 대한 포인터입니다. 메일 슬롯에서 다음 (즉, 하나) 레코드를 읽으려면 서버 프로그램이 먼저 GetMailslotInfo를 호출하여 다음 레코드의 크기(바이트)를 검색합니다(있는 경우).

Windows 95, Windows 98 및 Windows Me 플랫폼은 메일 슬롯 이름을 8.3자 이름 형식으로 자동으로 제한합니다. 이로 인해 Windows 95, Windows 98, Windows Me 및 Windows NT 간의 상호 운용성 문제가 발생합니다. 예를 들어.MailslotMymailslot, Windows 95, Windows 98 및 Windows Me로 메일 슬롯을 만들거나 열면 메일 슬롯을 \MailslotMymailsl로 실제로 만들고 참조합니다. CreateMailslot() 및 CreateFile() 함수는 이름 잘림이 발생하더라도 성공합니다. Windows NT에서 Windows 95, Windows 98 또는 Windows Me로 메시지를 보내거나 그 반대로 메일 슬롯 이름이 일치하지 않기 때문에 메시지가 수신되지 않습니다. 클라이언트와 서버가 Windows 95, Windows 98 또는 Windows Me 컴퓨터에서 모두 실행 중인 경우 문제가 없으며 클라이언트와 서버 모두에서 이름이 잘립니다. 상호 운용성 문제를 방지하는 쉬운 방법은 메일 슬롯 이름을 8자 이하로 제한하는 것입니다. 동일한 메일 슬롯 이름으로 Connect()를 두 번 이상 호출할 경우를 방지하기 위한 메서드의 시작 부분에 는 온전성 검사가 있습니다.

inicio atrás arriba

DESTACADOS

  • LINKS


  • Dirección de Investigación

    Investigación • Avenida Bulnes 01890 • Punta Arenas • Chile
    Teléfono: +56 61 2 209 397 • Email: dir.investigacion@umag.cl