[프로세스 간 통신] 오일 탱크를 이용하여 프로세스 간의 통신을 실현하다
1: 방송 통신을 기반으로 설계된
2: 연결이 없는 신뢰할 수 없는 데이터 전송
3: 단방향 통신 방식
4: 오일 탱크의 서버 프로세스 읽기, 클라이언트 프로세스 쓰기
5: 메시지의 길이는 424바이트 이하(한자 210개)
구현 단계:
1: MailslotSrv라는 단일 문서 프로그램으로 MFC AppWizard를 만들고 메뉴 항목을 추가합니다. "데이터 수신", IDM_MAILSLOT_RECE,view에서 메뉴에 명령 응답 추가
2: 응답 함수에서 다음 코드를 작성합니다.
void CMailslotSrvView::OnReceive()
{
// TODO: Add your command handler code here
HANDLE hMailslot; //
hMailslot = CreateMailslot("\\\\.\\mailslot\\MyMailslot",
0,MAILSLOT_WAIT_FOREVER,NULL);// , MSDN
if(INVALID_HANDLE_VALUE == hMailslot) // ,
{
MessageBox(" ");
return;
}
char buf[100];//
DWORD dwRead;
if(!ReadFile(hMailslot,buf,100,&dwRead,NULL))
{
MessageBox(" ");
CloseHandle(hMailslot);//
hMailslot = NULL;
return;
}
MessageBox(buf);
CloseHandle(hMailslot);// , 。
}
3: MailslotClt라는 MFC AppWizard 새 프로젝트를 추가하고 MailslotSrv와 같은 파일 디렉터리 아래(평행 디렉터리), "데이터 보내기"라는 메뉴를 추가하여 명령 응답을 추가합니다.
4: 명령 응답 함수에 다음 코드를 추가합니다.
void CMailslotCltView::OnSend()
{
// TODO: Add your command handler code here
//
HANDLE hMailslot;
hMailslot = CreateFile("\\\\.\\mailslot\\MyMailslot",GENERIC_WRITE,
FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);//
if(INVALID_HANDLE_VALUE == hMailslot)
{
MessageBox(" ");
return;
}
char buf[] = "Hello,Mailslot";
DWORD dwWrite;
if(!WriteFile(hMailslot,buf,strlen(buf) + 1,&dwWrite,NULL))
{
MessageBox(" ");
CloseHandle(hMailslot);
return;
}
CloseHandle(hMailslot);
}
5: 각각 컴파일하여 실행하면 됩니다.
참고: 먼저 서버 쪽에서 데이터 수신을 클릭한 다음 클라이언트에서 데이터 전송을 클릭합니다.순서가 바뀌면 프로그램이 정상적으로 작동하지 않습니다. 왜냐하면 기름탱크가 만들어지지 않으면 통신을 할 필요가 없습니다.
이것은 두 프로세스 간에 진행되는 통신(단방향)
같은 프로세스에서 어떻게 읽기와 쓰기를 실현합니까?
간단하다. 한 프로그램에서 기름탱크의 서버 측과 클라이언트를 동시에 작성하고 서버 측으로 데이터를 수신하며 클라이언트로 데이터를 전송한다.
우리는 기름탱크의 방송 특성을 이용하여 회의 알림 시스템을 만들 수 있는데, 그에 비해 프로그램 코드의 양은 매우 적을 것이다.같은 시스템이 socket으로 이루어진다면 상당히 복잡할 것이다.
모든 직원의 컴퓨터에 유조 서버 프로그램을 설치하고 관리자의 컴퓨터에 유조 클라이언트 프로그램을 설치하면 회의 알림을 실현할 수 있다.회의 메시지를 발표하려면 고객 프로그램에서 이 메시지를 보내면 모든 직원이 이 알림 메시지를 동시에 받을 수 있습니다.이렇게 하면 간단한 일대다 단방향 통신이 형성되었다.
기름탱크는 명명된 파이프와 마찬가지로 호스트에서 프로세스 간의 통신을 완성할 수 있을 뿐만 아니라 네트워크를 뛰어넘는 통신도 할 수 있다.클립보드와 익명 파이프에 대해 말하자면, 그것들은 같은 기계에서 프로세스 간의 통신만 실현할 수 있다.
오일 탱크는 일대다 통신을 실현할 수 있지만 전송되는 데이터량은 매우 적다.대량의 데이터를 전송하려면 파이프 방식으로 완성할 수 있다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
React 구성 요소에서 소켓 이벤트 리스너가 여러 번 실행됩니다.기본적이지만 종종 간과되는 사이드 프로젝트를 하면서 배운 것이 있습니다. 이 프로젝트에는 단순히 두 가지 주요 부분이 포함되어 있습니다. 프런트 엔드: 반응 및 재료 UI 백엔드: Express, Typescript...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.