社区
C#
帖子详情
命名管道的一些疑问
fldx
2012-02-04 10:59:38
大家好,我第一次使用命名管道NamedPipeServerStream,有些地方不是太明白。
我原以为实例化一个管道后,他就可以像socket一样,一直进行监听。但发现好像是他用完了之后,这个管道就整个被回收了,如果还要继续通信的话,必须再实例化一个管道。是这样的吗?
如果想实现这种类似于socket的功能,是不是我必须要不停的实例化管道呢?
...全文
227
11
打赏
收藏
命名管道的一些疑问
大家好,我第一次使用命名管道NamedPipeServerStream,有些地方不是太明白。 我原以为实例化一个管道后,他就可以像socket一样,一直进行监听。但发现好像是他用完了之后,这个管道就整个被回收了,如果还要继续通信的话,必须再实例化一个管道。是这样的吗? 如果想实现这种类似于socket的功能,是不是我必须要不停的实例化管道呢?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
11 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
fldx
2012-02-05
打赏
举报
回复
比较赞同您的说话。
[Quote=引用 8 楼 shigaofei1 的回复:]
很多人都说 WCF 好,我猜一定很好,
但是当我真的去了解时
发现,我真是看得一头雾水(我是看得 MSDN)经常觉得微软包装的东西 过于复杂,过度设计
还是Socket好,方便。
进程间 通讯 貌似 亦可以通过共享内存来实现。
[/Quote]
蔡袅
2012-02-05
打赏
举报
回复
WCF的命名管道只能在微软平台下使用(目前是这样),虽然命名管道是用来网络通信的;
主要可以用来跨进程通信;
随机生成的或者说指定的命名管道名存储在共享内存中,如果名称相同则可复用,不存在则创建。
mrsupersky
2012-02-05
打赏
举报
回复
补充:命名管道 确实 是个 好东西 最主要的是 效率 比较高。
mrsupersky
2012-02-05
打赏
举报
回复
很多人都说 WCF 好,我猜一定很好,
但是当我真的去了解时
发现,我真是看得一头雾水(我是看得 MSDN)经常觉得微软包装的东西 过于复杂,过度设计
还是Socket好,方便。
进程间 通讯 貌似 亦可以通过共享内存来实现。
fldx
2012-02-04
打赏
举报
回复
我试了一下,如果我在服务端实例化一个命名通道后,当一个客户端通信结束后,将这个通道关闭,再有别的客户端和服务端尝试连接就连接不上了。
如果我实例化两个命名通道,则可以满足两次通信。
照这样下去,难道我n次通信就要实例n次通道???
我这边看了一下微软的例子,发现他还真是这样做的。
http://msdn.microsoft.com/zh-cn/library/bb546085.aspx
[Quote=引用 6 楼 sp1234 的回复:]
引用 4 楼 fldx 的回复:
就比如说在客户端对管道进行操作后,关闭。然后这个管道就再也用不了了,被销毁了。我原以为会像socket监听一样,一直存在。
你所说的NamedPipeServerStream是服务器端,怎么又跑来说客户端呢?
他就好象是Http通讯,客户端虽然是“一问一答”地去搞什么“销毁”,但是服务器端进程总是无休止地可以进行下去,它也不过是“等待Con……
[/Quote]
以专业开发人员为伍
2012-02-04
打赏
举报
回复
[Quote=引用 4 楼 fldx 的回复:]
就比如说在客户端对管道进行操作后,关闭。然后这个管道就再也用不了了,被销毁了。我原以为会像socket监听一样,一直存在。
[/Quote]
你所说的NamedPipeServerStream是服务器端,怎么又跑来说客户端呢?
他就好象是Http通讯,客户端虽然是“一问一答”地去搞什么“销毁”,但是服务器端进程总是无休止地可以进行下去,它也不过是“等待Connection、处理接入,关闭接入,在开始等待下一个Connection.......”,或者是异步地等待Connection(在处理接入的同时就开始异步等待下一个Connection)。
fldx
2012-02-04
打赏
举报
回复
的确,我也试着不去close,但可能哪里有问题,他好像还是把他给收回去了。
[Quote=引用 3 楼 sp1234 的回复:]
如果你看msdn上的例子,msdn上关于通讯的例子大多都是非常非常幼稚的。它的namepipe服务器端的例子可能不过是从控制台上读取一行,然后写到接入的第一个命名管道客户端,然后就关闭了服务。这种例子只是哄小孩子的。不过你可以自己想想,你不去Close,而是继续读不就行了嘛。
[/Quote]
fldx
2012-02-04
打赏
举报
回复
就比如说在客户端对管道进行操作后,关闭。然后这个管道就再也用不了了,被销毁了。我原以为会像socket监听一样,一直存在。
[Quote=引用 1 楼 sp1234 的回复:]
怎么用完?
[/Quote]
以专业开发人员为伍
2012-02-04
打赏
举报
回复
如果你看msdn上的例子,msdn上关于通讯的例子大多都是非常非常幼稚的。它的namepipe服务器端的例子可能不过是从控制台上读取一行,然后写到接入的第一个命名管道客户端,然后就关闭了服务。这种例子只是哄小孩子的。不过你可以自己想想,你不去Close,而是继续读不就行了嘛。
threenewbee
2012-02-04
打赏
举报
回复
我建议你用 wcf,并且使用 pipe 协议,这样可以避免和底层的操作系统打交道。
以专业开发人员为伍
2012-02-04
打赏
举报
回复
怎么用完?
linux
命名
管道
too many open files,用
命名
管道
做C/S模式的程序,
管道
文件无法打开,?怎么解决啊。...
博客展示了一段Linux
命名
管道
相关代码,代码中尝试打开
命名
管道
文件,出现openfifo failed的情况,作者对此提出
疑问
,可能涉及Linux系统下
命名
管道
的使用及文件打开问题。
IPC进程间通信 ——
管道
该博客先回顾了IPC进程间通信的信号内容,指出不同种传统信号和实时信号接收情况。重点介绍了
管道
通信,包括匿名
管道
和
命名
管道
,阐述了
管道
符、相关函数及读写规则,还介绍了断言机制用于调试优化,最后总结了各部分内容并解答
疑问
。
[apue] 使用 popen/pclose 的一点
疑问
博客介绍了在需要将输出作为标准输入传递给命令时,可使用pipe与fork结合重定向,而popen/pclose简化了此工作。还说明了popen内部工作原理,即创建
管道
、fork子进程等。作者写程序验证,发现子进程有
命名
管道
,父进程却找不到,相关
疑问
解答可移步指定文章。
for line in file python,issue 3907: "for line in file" doesn't work for pipes - Python tracker
本文讨论了Python中'for line in file:'语法与等效的显式迭代方式在处理
命名
管道
时的行为差异。由于底层实现的预读缓冲区,对于
命名
管道
,'for line in file:'并不立即读取每一行,这可能导致在监控日志程序时延迟读取。作者提出
疑问
,是否可以针对不同类型的文件对象内部使用不同的迭代方法,以确保一致性,并探讨了逐字符读取与预读缓冲区在内存
管道
中的性能影响。
【Linux】深度探秘
命名
管道
:Linux 进程通信的无声桥梁
本文介绍了Unix/Linux系统中的
命名
管道
,它是一种重要的进程间通信机制。阐述了
命名
管道
的特点、创建方法、工作原理,对比了与匿名
管道
的区别与联系,还给出了简单应用示例,如文件拷贝小程序,最后总结了
命名
管道
适用于所有进程间通信场景。
C#
111,129
社区成员
642,535
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章