一个命名管道可以被多个客户端连接么

 我来答
匿名用户
2017-02-18
展开全部
m_hPipe = CreateNamedPipe("\\\\.\\Pipe\\Test", PIPE_ACCESS_DUPLEX, PIPE_TYPE_BYTE | PIPE_READMODE_BYTE, 1, 0, 0, 1000, NULL); // 创建命名管道

if (m_hPipe == INVALID_HANDLE_VALUE) m_sMessage = "创建命名管道失败!";

else

{ 

m_sMessage = "成功创建命名管道!"; 

AfxBeginThread(ReadProc, this); // 开启线程

}

UINT ReadProc(LPVOID lpVoid)

{

 char buffer[1024]; // 数据缓存

 DWORD ReadNum;

 CServerView* pView = (CServerView*)lpVoid; // 获取视句柄

 if (ConnectNamedPipe(pView->m_hPipe, NULL) == FALSE) // 等待客户机的连接

 {

  CloseHandle(pView->m_hPipe); // 关闭管道句柄

  pView->m_sMessage = "与客户机建立连接失败!"; // 显示信息

  pView->Invalidate();

  return 0;

 }else{

  pView->m_sMessage = "与客户机建立连接!"; // 显示信息

  pView->Invalidate();

 }

 // 从管道读取数据

 if (ReadFile(pView->m_hPipe, buffer, sizeof(buffer), &ReadNum, NULL) == FALSE)

 {

  CloseHandle(pView->m_hPipe); // 关闭管道句柄

  pView->m_sMessage = "从管道读取数据失败!"; // 显示信息

  pView->Invalidate();

 } else {

  buffer[ReadNum] = '\0'; // 显示接收到的信息

  pView->m_sMessage = CString(buffer);

  pView->Invalidate();

 }

 return 1;

}

这是一段比较流行的代码

你在CreateNamePipe的时候使用了选项:PIPE_NOWAIT,非阻塞的方式,你改为阻塞的方式看看

呵呵,助你好运
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式