注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

从C开始

 
 
 

日志

 
 

进程间通信 - 命名管道  

2010-11-21 19:41:37|  分类: MFC |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

//命名管道式可以通过网络来完成进程间的通信,它屏蔽了底层的网络协议细节。
//服务器是唯一一个可以创建命名管道的进程,也只有它才能接受客户机的连接请求。
//而客户机只能同一个现成的命名管道服务器建立连接。

//服务器端

//创建命名管道
void CNamedPipeView::OnPipeCreate() 
{
// TODO: Add your command handler code here
m_hPipe = CreateNamedPipe("\\\\.\\pipe\\MyNamedPipe", PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED,
0, 1, 1024, 1024, 0, NULL);
if(INVALID_HANDLE_VALUE == m_hPipe)
{
MessageBox("创建命名管道失败!");
m_hPipe = NULL;
return;
}
HANDLE hEvent;
//创建一个匿名的人工重置事件对象
hEvent = CreateEvent(NULL, TRUE, FALSE, NULL);
if (hEvent == NULL)
{
MessageBox("创建事件内核对象失败!");
CloseHandle(m_hPipe);
m_hPipe = NULL;
return;
}
OVERLAPPED ov;
ZeroMemory(&ov, sizeof(OVERLAPPED));
ov.hEvent = hEvent;
if (!ConnectNamedPipe(m_hPipe, &ov))
{
if (GetLastError() != ERROR_IO_PENDING)
{
MessageBox("连接客户端失败!");
CloseHandle(m_hPipe);
CloseHandle(hEvent);
m_hPipe = NULL;
return;
}
}

if (WAIT_FAILED == WaitForSingleObject(hEvent, INFINITE))
{
MessageBox("等待事件内核对象失败!");
CloseHandle(m_hPipe);
CloseHandle(hEvent);
m_hPipe = NULL;
return;
}

CloseHandle(hEvent);
}

void CNamedPipeView::OnPipeRead() 
{
// TODO: Add your command handler code here
char readBuf[100];
DWORD dwRead;
if(!ReadFile(m_hPipe, readBuf, 100, &dwRead, NULL))
{
MessageBox("读取数据失败!");
return;
}
MessageBox(readBuf);
}

void CNamedPipeView::OnPipeWrite() 
{
// TODO: Add your command handler code here
char writeBuf[] = "http://www.pcslonline.com";
DWORD dwWrite;
if (!WriteFile(m_hPipe, writeBuf, lstrlen(writeBuf) + 1, &dwWrite, NULL))
{
MessageBox("写入数据失败!");
return;
}
}


//客户端

void CNamePipeClientView::OnPipeConnect() 
{
// TODO: Add your command handler code here
if (!WaitNamedPipe("\\\\.\\pipe\\MyNamedPipe", NMPWAIT_WAIT_FOREVER))
{
MessageBox("当前没有可以利用的命名管道!");
return;
}
m_hPipe = CreateFile("\\\\.\\pipe\\MyNamedPipe", GENERIC_READ | GENERIC_WRITE,
0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (m_hPipe == INVALID_HANDLE_VALUE)
{
MessageBox("打开命名管道失败!");
m_hPipe = NULL;
return;
}
}

void CNamePipeClientView::OnPipeRead() 
{
// TODO: Add your command handler code here
char readBuf[100];
DWORD dwREAD;
if (!ReadFile(m_hPipe, readBuf, 100, &dwREAD, NULL))
{
MessageBox("读取文件失败!");
return;
}
MessageBox(readBuf);
}

void CNamePipeClientView::OnPipeWrite() 
{
// TODO: Add your command handler code here
char writeBuf[] = "命名管道测试程序!";
DWORD dwWrite;
if (!WriteFile(m_hPipe, writeBuf, strlen(writeBuf) + 1, &dwWrite, NULL))
{
MessageBox("写入数据失败!");
return;
}
}
  评论这张
 
阅读(242)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018