为什么命名管道无法创建呢?

BlackFIre531 2009-08-15 12:16:29
我按照孙鑫《vc++深入详解》里第17课的 命名管道 的例子,为什么创建命名管道后程序就失去响应了,而他的例子却能正确编译并创建呢?我在xp+vc6,xp+vs9 都试过了,都是不行,哪位高手知道,麻烦不吝赐教啊~~

这是创建管道的代码:

hPipe=CreateNamedPipe("\\\\.\\pipe\\MyPipe",
PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED,
0,1,1024,1024,0,NULL);
if(INVALID_HANDLE_VALUE==hPipe)
{
MessageBox("创建命名管道失败!");
hPipe=NULL;
return;
}
HANDLE hEvent;
hEvent=CreateEvent(NULL,TRUE,FALSE,NULL);
if(!hEvent)
{
MessageBox("创建事件对象失败!");
CloseHandle(hPipe);
hPipe=NULL;
return;
}
OVERLAPPED ovlap;
ZeroMemory(&ovlap,sizeof(OVERLAPPED));
ovlap.hEvent=hEvent;
if(!ConnectNamedPipe(hPipe,&ovlap)) {
if(ERROR_IO_PENDING!=GetLastError())
{
MessageBox("等待客户端连接失败!");
CloseHandle(hPipe);
CloseHandle(hEvent);
hPipe=NULL;
return;
}
}
if(WAIT_FAILED==WaitForSingleObject(hEvent,INFINITE))
{
MessageBox("等待对象失败!");
CloseHandle(hPipe);
CloseHandle(hEvent);
hPipe=NULL;
return;
}
CloseHandle(hEvent);

直接从他的文件里拷贝过来的,每次都会卡死在红色那行……
...全文
366 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
x22ray 2009-08-15
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 blackfire531 的回复:]
但是他的例程里也没有客户端啊,可以正常返回。
[/Quote]
不可能没有客户端,你再仔细看看,他写的一般是本地机的测试程序,有可能集成在一起了
x22ray 2009-08-15
  • 打赏
  • 举报
回复
你写的是正确的,没错,他要等待客户端的连接哈。。你写了客户端后,连接一下就可以运行了。。
BlackFIre531 2009-08-15
  • 打赏
  • 举报
回复
但是他的例程里也没有客户端啊,可以正常返回。
zyq5945 2009-08-15
  • 打赏
  • 举报
回复
程序就在这里等待客户端连接,有连接了程序才会继续走下去。
BlackFIre531 2009-08-15
  • 打赏
  • 举报
回复
hPipe=CreateNamedPipe("\\\\.\\pipe\\MyPipe",
PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED,
0,1,1024,1024,0,NULL);

这样产生的应该是异步的啊……
BlackFIre531 2009-08-15
  • 打赏
  • 举报
回复
对于多线程还不太了解,回去看看书。感谢ls。
还有,我用命名管道作为服务器,中转通过tcp从广域网来的文本信息到本地另一个软件上,这样合理吗?
zoulie 2009-08-15
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 blackfire531 的回复:]
引用 4 楼 x22ray 的回复:
引用 2 楼 blackfire531 的回复:
但是他的例程里也没有客户端啊,可以正常返回。

不可能没有客户端,你再仔细看看,他写的一般是本地机的测试程序,有可能集成在一起了

感谢ls提醒!我仔细看了下,他的程序也会没响应!谢谢了!
那我想做个服务器,怎么能让在等待连接的时候也不回卡死呢?
[/Quote]
使用多个线城或者使用异步I/O
BlackFIre531 2009-08-15
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 x22ray 的回复:]
引用 2 楼 blackfire531 的回复:
但是他的例程里也没有客户端啊,可以正常返回。

不可能没有客户端,你再仔细看看,他写的一般是本地机的测试程序,有可能集成在一起了
[/Quote]
感谢ls提醒!我仔细看了下,他的程序也会没响应!谢谢了!
那我想做个服务器,怎么能让在等待连接的时候也不回卡死呢?
zoulie 2009-08-15
  • 打赏
  • 举报
回复
肯定有服务器端与客户端的,仔细看
等待客户端连接才返回
BlackFIre531 2009-08-15
  • 打赏
  • 举报
回复
好的,谢谢楼上各位!
MoXiaoRab 2009-08-15
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 blackfire531 的回复:]
对于多线程还不太了解,回去看看书。感谢ls。
还有,我用命名管道作为服务器,中转通过tcp从广域网来的文本信息到本地另一个软件上,这样合理吗?
[/Quote]
没有不合理的地方

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧