# 管道通信

管道通信属于进程间通信的一种,但是比起管道或许 WebSocket 更好用一些。

# 管道发起端

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
Console.WriteLine("Server");
while(true)
{
NamedPipeServerStream server = new("pipe");
server.WaitForConnection();
try
{
StreamReader sr = new(server);
while (true)
{
string cmd = sr.ReadLine();
Console.WriteLine($"Request: {cmd}");
string response = "response";
byte[] buffer = Encoding.UTF8.GetBytes(cmd + "\n");
server.Write(buffer, 0, buffer.Length);
}
}
catch
{
server.Close();
}
}

# 管道另一端

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Console.WriteLine("Client");
NamedPipeClientStream server = new("pipe");
server.Connect();
StreamReader sr = new(server);
while (true)
{
string response = Console.ReadLine();
byte[] buffer = Encoding.UTF8.GetBytes(response + "\n");
try
{
server.Write(buffer, 0, buffer.Length);
string cmd = sr.ReadLine();
Console.WriteLine($"Response: {cmd}");
}
catch
{
server = new("pipe");
server.Connect();
server.Write(buffer, 0, buffer.Length);
string cmd = sr.ReadLine();
if(cmd == null)
{
sr = new(server);
cmd = sr.ReadLine();
}
Console.WriteLine($"Response: {cmd}");
}
}

上述代码对管道进行了一些处理,对于两侧哪边断开都经过了处理,方便使用

更新于 阅读次数