[프로세스 간 통신] 오일 탱크를 이용하여 프로세스 간의 통신을 실현하다

기름탱크
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으로 이루어진다면 상당히 복잡할 것이다.
모든 직원의 컴퓨터에 유조 서버 프로그램을 설치하고 관리자의 컴퓨터에 유조 클라이언트 프로그램을 설치하면 회의 알림을 실현할 수 있다.회의 메시지를 발표하려면 고객 프로그램에서 이 메시지를 보내면 모든 직원이 이 알림 메시지를 동시에 받을 수 있습니다.이렇게 하면 간단한 일대다 단방향 통신이 형성되었다.
 
기름탱크는 명명된 파이프와 마찬가지로 호스트에서 프로세스 간의 통신을 완성할 수 있을 뿐만 아니라 네트워크를 뛰어넘는 통신도 할 수 있다.클립보드와 익명 파이프에 대해 말하자면, 그것들은 같은 기계에서 프로세스 간의 통신만 실현할 수 있다.
오일 탱크는 일대다 통신을 실현할 수 있지만 전송되는 데이터량은 매우 적다.대량의 데이터를 전송하려면 파이프 방식으로 완성할 수 있다.

좋은 웹페이지 즐겨찾기