命名管道服务器&客户端-无消息
本文关键字:消息 客户端 管道 服务器 | 更新日期: 2023-09-27 18:10:38
我正在努力学习如何做命名管道。所以我在LinqPad中创建了一个服务器和客户端。
这是我的服务器:
var p = new NamedPipeServerStream("test3", PipeDirection.Out);
p.WaitForConnection();
Console.WriteLine("Connected!");
new StreamWriter(p).WriteLine("Hello!");
p.Flush();
p.WaitForPipeDrain();
p.Close();
这是我的客户:
var p = new NamedPipeClientStream(".", "test3", PipeDirection.In);
p.Connect();
var s = new StreamReader(p).ReadLine();
Console.Write("Message: " + s);
p.Close();
我运行服务器,然后是客户端,我看到"已连接!"出现在服务器上,所以它正在正确连接。但是,客户端总是显示Message:
,后面没有任何内容,因此数据实际上并没有从服务器传输到要显示的客户端。我已经尝试过交换管道方向,并让客户端以相同的结果向服务器发送数据。
为什么在这个例子中数据没有在屏幕上打印出来?我错过了什么?
谢谢!
就像L.B说的,你必须冲洗StreamWriter
。但是使用using
模式可以防止这样的错误:
using (var p = new NamedPipeServerStream("test3", PipeDirection.Out))
{
p.WaitForConnection();
Console.WriteLine("Connected!");
using (var writer = new StreamWriter(p))
{
writer.WriteLine("Hello!");
writer.Flush();
}
p.WaitForPipeDrain();
p.Close();
}
在上面的代码中,即使省略了Flush()
和Close()
,一切都将按预期工作(因为当对象被处置时也会执行这些操作)。此外,如果抛出任何异常,所有内容仍将被正确清除。
按如下方式更改服务器代码:
StreamWriter wr = new StreamWriter(p);
wr.WriteLine("Hello!'n");
wr.Flush();
你的字符串不会在StreamWriter中刷新