# 管道通信
管道通信属于进程间通信的一种,但是比起管道或许 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}"); } }
|
上述代码对管道进行了一些处理,对于两侧哪边断开都经过了处理,方便使用