WSP23

LJM·2023년 8월 10일
0

컴퓨터지식

목록 보기
24/41

메일슬롯을 사용할 때의 기본적인 동작 원리는 다음과 같습니다:

서버 (메시지 수신자): CreateMailslot 함수를 사용하여 메일슬롯을 생성합니다. 이 메일슬롯은 내부적으로 메시지 큐를 가지고 있습니다.

클라이언트 (메시지 발신자): CreateFile 함수를 사용하여 서버의 메일슬롯에 연결합니다. 그 후 WriteFile 함수를 사용하여 메시지를 메일슬롯에 보냅니다.

메시지 전송: 클라이언트가 메시지를 보내면, 이 메시지는 서버의 메일슬롯에 연결된 메시지 큐에 저장됩니다.

서버에서 메시지 읽기: 서버는 ReadFile 함수를 사용하여 메시지 큐에서 메시지를 읽을 수 있습니다. 메시지가 읽히면 큐에서 해당 메시지는 제거됩니다.

따라서, 메일슬롯은 메시지를 전송하고 받는 데 사용되는 인터페이스이며, 실제 메시지는 메시지 큐에 저장되어 있습니다. 이 메시지 큐는 메모리 내부에 있으므로 빠른 통신이 가능합니다.

//MailReceiver.cpp

SLOT_NAME "\\\\.\\mailslot\\mailbox"

hMailslot = CreateMailslot(SLOT_NAME)
SLOT_NAME 을 기반으로 메일슬롯생성 하고 있다. 

//Message 수신
TCHAR messageBox[50]
DWORD bytesRead


ReadFile(hMailSlot, messageBox, sizeof(TCHAR)*50, &bytesRead, NULL)
메일슬롯으로 전달된 데이터를 읽어 오고 있다.

messageBox[bytesRead/sizeof(TCHAR)] = 0;
_fputts(messageBox, stdout);
메일슬롯에 들어오는 데이터를 읽어서 콘솔에 출력한다
//MailSender.cpp

SLOT_NAME "\\\\.\\mailslot\\mailbox"

hMailSlot = CreateFile(SLOT_NAME, GENERIC_WRITE, OPEN_EXISTING)
호출하면서 메일슬롯에 메시지를 전달하기 위한 데이터 스트림을 생성하고 있다

_fgetts(message, sizeof(message)sizeof(TCHAR), stdin);

if(!WriteFile(hMailSlot, message, _tcslen(message)*sizeof(TCHAR), &bytesWritten, NULL)

CreateFile 첫째인자는 생성 및 개방하고자 하는 파일이름을 지정하는 용도인데 여기서는 데이터를 전달할 메일슬롯을 지정하는 용도로 사용함

OpenMode 는 쓰기모드인 GENERIC_WRITE

생성방식 결정인자는 OPEN_EXISTING 이는 기존에 만들어진 파일을 개방할때 사용하는 전달인자

위의 프로그램을 실행하는 과정에 있어서 주의할것은 Receiver 를 먼저 실행하고 Sender 를 실행해야 한다는 점이다

그이유는 Sender 에서는 CreateFile 함수를 호출하면서 다섯 번째 인자로 OPEN_EXISTING 을 전달하고 잇음을 생각해보면 쉽게 이해할 수 잇다

profile
게임개발자 백엔드개발자

0개의 댓글