Windows命名管道无法通过网络工作?

| 我在C#中的Windows上遇到命名管道的奇怪问题。 客户:
    NamedPipeClientStream pipeStream = new NamedPipeClientStream(\"default-PC\",\"mypipe\");

    pipeStream.Connect();
    BinaryWriter sw = new BinaryWriter(pipeStream);
    sw.Write((byte[]) data);
服务器:
    NamedPipeServerStream pipeStream = new NamedPipeServerStream(\"mypipe\");
    byte[] dataAll = null;
    pipeStream.WaitForConnection();
    dataAll = new BinaryReader(pipeStream).ReadBytes(1024 * 1000 * 512);
- 如果我在NamedPipeClientStream的构造函数中使用\“。\\”作为服务器名称,则一切正常,即服务器填充了dataAll对象。 现在,奇怪的是,如果我将计算机的网络名称(\“ default-PC \”)放入NamedPipeClientStream中,如上面的代码所示,则服务器上没有任何数据作为服务器中的ReadBytes读取代码返回一个空数组。 这可以理解,我在两台不同的计算机上运行服务器和客户端,但是它们都在同一台计算机上运行。唯一的区别是NamedPipeClientStream中的\“服务器名称\”参数是\“。\”还是实际的网络名称(甚至是本地主机)。 有任何想法吗?     
已邀请:
我相信\“。\”和\“ localhost \”都被视为特殊名称,它们不使用普通的网络连接,而是某种形式的环回。 当您指定计算机名称,甚至是您自己计算机的名称时,它都会使用标准的网络协议/堆栈/等。 您可能需要打开防火墙端口。 TCP445。同样,默认情况下,Windows允许所有传出通信。您只需要添加入站端口例外。当然,您的配置可能会有所不同。 .NET 3.5(C#)通过网络命名的管道     
因此结论是: 如果NamedPipeClientStream中的Server name参数不是\“。\”,则基础实现是通过传输层实现的,该传输层在单个Write操作中最多支持64k。问题是,如果您写入的数据超过64k,则数据只会消失而不是引发异常。 解决方案是直接使用NamedPipeClientStream并以少于64kb的块写入数据。     

要回复问题请先登录注册