我有两个通过命名管道相互通信的.NET应用程序。第一次通过时一切都很好,但在发送第一条消息并且服务器要再次收听之后,WaitForConnection()
方法会抛出System.IO.Exception
,并显示消息管道已损坏。
为什么我在这里得到这个异常?这是我第一次使用管道工作,但是类似的模式在过去也适用于我的套接字。System.IO.Exception:管道中断
代码ahoy!
服务器:
using System.IO.Pipes;
static void main()
{
var pipe = new NamedPipeServerStream("pipename", PipeDirection.In);
while (true)
{
pipe.Listen();
string str = new StreamReader(pipe).ReadToEnd();
Console.Write("{0}", str);
}
}
客户:
public void sendDownPipe(string str)
{
using (var pipe = new NamedPipeClientStream(".", "pipename", PipeDirection.Out))
{
using (var stream = new StreamWriter(pipe))
{
stream.Write(str);
}
}
}
到sendDownPipe第一次调用获取服务器打印我送就好了消息,但是当它循环回到再听一遍,它poops。
我认为你有这个问题的原因是因为该行的“新的StreamReader(管)”。创建的流读取器的范围是第一个while循环,然后重新创建。然而,流读取器的行为是关闭它们正在包装的流 - 因此一旦它超出范围,它将关闭管道流。你可以尝试将它的声明移出while循环并检查(P.S:如果你这么做的话,我没有亲自尝试代码的工作 - 只是想添加一个评论而不是回答) – user3141326 2016-04-07 15:05:43