一个命名管道可以被多个客户端连接么
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,非阻塞的方式,你改为阻塞的方式看看
呵呵,助你好运
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,非阻塞的方式,你改为阻塞的方式看看
呵呵,助你好运
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询