如何在c#中正确使用命名管道——多个连接,服务器重建等
本文关键字:连接 管道 重建 服务器 | 更新日期: 2023-09-27 18:09:42
我需要实现c#应用程序之间的进程间通信。我决定使用命名管道,并编写以下代码:
服务器while (true)
{
using (var server = new NamedPipeServerStream("some_pipe"))
{
server.WaitForConnection();
using (var reader = new StreamReader(server))
{
string line = reader.ReadLine();
MessageBox.Show(line);
}
}
}
using (var client = new NamedPipeClientStream("some_pipe"))
{
client.Connect();
using (var writer = new StreamWriter(client))
{
writer.AutoFlush = true;
writer.WriteLine(path);
client.WaitForPipeDrain();
}
}
我有以下问题:
- 这个解决方案是否正确?您是否已经看到了任何问题或漏洞?
- 如果第二个客户端试图连接到这个服务器,将会发生什么?它会等待第一个客户端完成,还是只是将其消息与另一个客户端的实例一起发送,从而导致垃圾? 我真的应该每次都创建
NamedPipeServerStream
类的另一个实例吗?如果我从while (true)
循环中移动它的结构,它会给我一个异常"无法访问封闭管道"。我怎样才能避免呢?如果我不能避免它,并且每次都应该重新创建这个对象,那么当客户端尝试连接它时,如果没有NamedPipeServerStream
会发生什么?这行不通。多个客户端连接到一个NamedPipeServerStream是一个不可用的功能。它的名字是"……"ServerStream"具有误导性。管道是1对1连接。您必须有多个服务器实例为许多客户机提供相同的管道。这个代码项目展示了如何实现服务器管道,可能会对您有所帮助。