命名管道通过网络来完成进程间通信,它屏蔽了底层的网络协议细节。
采用命名管道完成进程通信的过程为:
1.在服务器端调用CreateNamedPipe创建命名管道之后,调用ConnectNamedPipe函数让服务器进程等待客户端进程连接到该命名管道的实例上。
2.在客户端,首先调用WaitNamedPipe函数判断当前是否有可以利用的命名管道实例,如果有就调用CreateFile函数打开该命名管道的实例,并建立一个连接。
之后就可以通过ReadFile、WriteFile进行通信。
一、服务器端程序
private:
HANDLE m_hPipe;//命名管道实例句柄
void CNamedPipeSrcView::OnPipeCreate()
{
//创建命名管道
m_hPipe = CreateNamedPipe("\\\\.\\pipe\\MyPipe",
PIPE_ACCESS_DUPLEX|FILE_FLAG_OVERLAPPED, 0, 1, 1024, 1024, 0, NULL);
if (INVALID_HANDLE_VALUE == m_hPipe)
{
MessageBox("创建命名管道失败!");
m_hPipe = NULL;
return;
}
//创建匿名的人工重置事件对