命名管道的一些疑问 大家好,我第一次使用命名管道NamedPipeServerStream,有些地方不是太明白。我原以为实例化一个管道后,他就可以像socket一样,一直进行监听。但发现好像是他用完了之后,这个管道就整个被回收了,如果还要继续通信的话,必须再实例化一个管道。是这样的吗?如果想实现这种类似于socket的功能,是不是我必须要不停的实例化管道呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我建议你用 wcf,并且使用 pipe 协议,这样可以避免和底层的操作系统打交道。 如果你看msdn上的例子,msdn上关于通讯的例子大多都是非常非常幼稚的。它的namepipe服务器端的例子可能不过是从控制台上读取一行,然后写到接入的第一个命名管道客户端,然后就关闭了服务。这种例子只是哄小孩子的。不过你可以自己想想,你不去Close,而是继续读不就行了嘛。 就比如说在客户端对管道进行操作后,关闭。然后这个管道就再也用不了了,被销毁了。我原以为会像socket监听一样,一直存在。 的确,我也试着不去close,但可能哪里有问题,他好像还是把他给收回去了。 你所说的NamedPipeServerStream是服务器端,怎么又跑来说客户端呢?他就好象是Http通讯,客户端虽然是“一问一答”地去搞什么“销毁”,但是服务器端进程总是无休止地可以进行下去,它也不过是“等待Connection、处理接入,关闭接入,在开始等待下一个Connection.......”,或者是异步地等待Connection(在处理接入的同时就开始异步等待下一个Connection)。 我试了一下,如果我在服务端实例化一个命名通道后,当一个客户端通信结束后,将这个通道关闭,再有别的客户端和服务端尝试连接就连接不上了。如果我实例化两个命名通道,则可以满足两次通信。照这样下去,难道我n次通信就要实例n次通道???我这边看了一下微软的例子,发现他还真是这样做的。http://msdn.microsoft.com/zh-cn/library/bb546085.aspx 很多人都说 WCF 好,我猜一定很好,但是当我真的去了解时发现,我真是看得一头雾水(我是看得 MSDN)经常觉得微软包装的东西 过于复杂,过度设计 还是Socket好,方便。进程间 通讯 貌似 亦可以通过共享内存来实现。 WCF的命名管道只能在微软平台下使用(目前是这样),虽然命名管道是用来网络通信的;主要可以用来跨进程通信;随机生成的或者说指定的命名管道名存储在共享内存中,如果名称相同则可复用,不存在则创建。 谁知道C# 如何获取本机所有适配器的信息、 如何验证XML文件是否符合规范。。。在线等。 如何编写一个0到2*PI的随机数呀,谢谢! 用C#操作Word的问题??? C# 能开发安卓应用软件吗? C#操作字符串 Console.WriteLine(Convert.ToInt32("12.00000000000000000000000")); 报错,求原因? c# OracleParameter问题出在哪里? 请问有没有专门做打印格式的控件或代码? wrox 的书的源码下载怎没有-up有分 情人节爱心贴 也想知道
你所说的NamedPipeServerStream是服务器端,怎么又跑来说客户端呢?他就好象是Http通讯,客户端虽然是“一问一答”地去搞什么“销毁”,但是服务器端进程总是无休止地可以进行下去,它也不过是“等待Connection、处理接入,关闭接入,在开始等待下一个Connection.......”,或者是异步地等待Connection(在处理接入的同时就开始异步等待下一个Connection)。
http://msdn.microsoft.com/zh-cn/library/bb546085.aspx
但是当我真的去了解时
发现,我真是看得一头雾水(我是看得 MSDN)经常觉得微软包装的东西 过于复杂,过度设计
还是Socket好,方便。
进程间 通讯 貌似 亦可以通过共享内存来实现。
主要可以用来跨进程通信;
随机生成的或者说指定的命名管道名存储在共享内存中,如果名称相同则可复用,不存在则创建。