如何在网络上使用命名管道?
我正在尝试通过命名管道在网络上创建连接。 我正如msdn中所说的那样做。 我用function创建管道服务器端。
CreateNamedPipe( "\\.\pipe\myNamedPipe", DUPLEX | FILE_FLAG_OVERLAPPED, 0, 255, BUFFER_SIZE, BUFFER_SIZE, 0, IntPtr.Zero);
并尝试通过CreateFile()函数进行连接
CreateFile( "\\10.0.0.29\pipe\myNamedPipe", GENERIC_READ | GENERIC_WRITE, 0, IntPtr.Zero, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, IntPtr.Zero);
10.0.0.29是服务器机器ip。 如果我试图在服务器计算机上运行客户端程序,管道名称为“\。 pipe myNamedPipe”或“\ 10.0.0.29 pipe myNamedPipe”(10.0.0.29是服务器IP)或“\ localhost pipe myNamedPipe“它工作正常。
那么如何在网络上使用命名管道呢?
从版本3.5开始,.NET Framework本身支持命名管道,您不必使用繁琐的互操作p / invoke代码。 请参阅此处的介绍文章: .NET 3.5为示例添加命名管道支持 。
使用此构造函数重载, NamedPipeClientStream构造函数(String,String) ,可以传递服务器名称参数。
我认为上面已经回答了这个问题,但请记住,使用打开到远程计算机的命名管道存在很大问题。 当您使用超过0的超时调用Windows API函数WaitNamedPipe时,调用线程将使用整个CPU,直到命名管道连接或超时。 如果超时为0,则没有足够的时间进行远程连接,因此每次尝试连接时基本上都不得不使用所有CPU,所有可以做的就是超时,稍后再试。
我遇到了这个问题,发现我并不孤单: http : //social.msdn.microsoft.com/Forums/sv-SE/netfxnetcom/thread/7bbf5a0b-3c22-4836-b271-999e514c321b
在微软提供更友好的连接远程命名管道的方式之前,我将完全停止使用它们,我建议你也这样做。 如果由于任何原因你几乎不能立即连接,你最终会得到一个活锁。
管道服务器必须具有指定服务器名称而不是IP地址所需的名称。
请参阅本教程。
但是,命名管道便于本地连接,因为在网络上,您会得到TCP封装的开销,这使得使用命名管道变得不方便。
使用命名管道进行本地连接可以提高速度,但是通过网络没有多大意义…使用套接字……
上述就是C#学习教程:如何在网络上使用命名管道?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1301133.html