【发布时间】:2010-10-28 01:59:37
【问题描述】:
我有两个通过命名管道相互通信的 .NET 应用程序。第一次一切都很好,但是在发送第一条消息之后,服务器将再次侦听,WaitForConnection() 方法抛出 System.IO.Exception 消息 Pipe is broken.
为什么我在这里得到这个异常?这是我第一次使用管道,但过去使用套接字的类似模式也适用于我。
代码啊!
服务器:
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 的第一次调用让服务器打印我发送的消息就好了,但是当它循环回来再次收听时,它便便。
【问题讨论】:
-
我认为您遇到此问题的原因是因为“new StreamReader(pipe)”行。创建的流阅读器的范围是第一个 while 循环,然后重新创建它。但是,流读取器的行为是关闭它们正在包装的流 - 因此一旦超出范围,它将关闭管道流。您可以尝试将其声明移出 while 循环并检查(PS:如果您这样做,我没有亲自尝试代码是否有效 - 只是想添加评论而不是回答)
标签: c# .net-3.5 named-pipes