命名管道服务器&客户端-无消息

本文关键字:消息 客户端 管道 服务器 | 更新日期: 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中刷新