当前位置: 首页 > 编程语言 > C#

如何在网络上使用命名管道?分享

时间:2023-04-10 17:53:25 C#

网络上如何使用命名管道?我正在尝试通过命名管道在网络上创建连接。我按照msdn里说的做。我使用函数创建管道服务器端。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。如果我尝试在管道名称为“\.pipemyNamedPipe”或“\10.0.0.29pipemyNamedPipe”(10.0.0.29是服务器IP)或“\localhostpipemyNamedPipe”的服务器计算机上运行客户端程序,它会起作用美好的。那么如何在网络上使用命名管道呢?从3.5版开始,.NETFramework原生支持命名管道,您不必使用繁琐的互操作p/invoke代码。请参阅此处的介绍性文章:.NET3.5添加命名管道支持示例。使用此构造函数重载NamedPipeClientStream构造函数(String,String),可以传递服务器名称参数。我认为上面已经回答了这个问题,但请记住,使用对远程机器开放的命名管道是非常有问题的。当您调用超时大于0的WindowsAPI函数WaitNamedPipe时,调用线程将使用整个CPU,直到命名管道连接或超时。如果超时为0,说明你没有足够的时间进行远程连接,所以基本上每次尝试连接时都必须使用所有CPU,你所能做的就是超时,稍后再试。我遇到了这个问题,发现我不是一个人:http://social.msdn.microsoft.com/Forums/sv-SE/netfxnetcom/thread/7bbf5a0b-3c22-4836-b271-999e514c321batMicrosoftfor更友好的连接在使用远程命名管道之前,我将完全停止使用它们,我建议您也这样做。如果出于任何原因您几乎无法立即连接,您将以活锁告终。管道服务器必须具有指定服务器名称而不是IP地址所需的名称。请参阅本教程。然而,命名管道对于本地连接来说很方便,因为在网络上,你得到了TCP封装的开销,这使得命名管道的使用变得不方便。本地连接使用命名管道可以提高速度,但是在网络上就没有多大意义了……使用套接字……以上是C#学习教程:如何在网络上使用命名管道?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: