一个最简单的C#管道(NamePipe)全双工通信实例
?????? 命名管道NamedPipe,可以用于進程間通信。本文創(chuàng)建兩個exe工程,做為兩個進程。一個為管道客戶端,一個為管道服務(wù)端。互為雙向通信。例子摘自MSDN。用控制臺或者winForm,啟動時,調(diào)用對應(yīng)的函數(shù),并打好斷點就可以做測試了。
??????? 首先需要引用命名空間,using System.IO;?? using System.IO.Pipes;
??????? 注:下面讀寫用了兩種方式。
1)服務(wù)端
??????? a.使用using非托管釋放。管道名稱是testpipe。而工作方式是雙向的InOut。
??????? b.等待連接時阻塞的,直到客戶端連接進來。
??????? c.pipeServer.Read也是阻塞的,等待接收客戶端發(fā)送的消息,數(shù)據(jù)存在data中。
??????? d.創(chuàng)建一個streamWriter并向客戶端發(fā)送數(shù)據(jù)
using (NamedPipeServerStream pipeServer = new NamedPipeServerStream("testpipe", PipeDirection.InOut))
??????????? {
??????????????? pipeServer.WaitForConnection();
??????????????? var data = new byte[10240];
??????????????? var count = pipeServer.Read(data, 0, 10240);
??????????????? using (StreamWriter sw = new StreamWriter(pipeServer))
??????????????? {
??????????????????? sw.AutoFlush = true;
??????????????????? sw.WriteLine("send to client");
??????????????? }
???????????? }
2)客戶端
??????? a.使用using非托管釋放。創(chuàng)建客戶端。
??????? b.連接到服務(wù)端,調(diào)用Connect的時候,服務(wù)端如果有斷點可以看到跳轉(zhuǎn)到了waitForConnection下面。
??????? c.使用pipeClient.Write向服務(wù)端發(fā)送值,服務(wù)端的pipeServer.Read響應(yīng)。
??????? d.創(chuàng)建一個StreamReader ,接收服務(wù)端發(fā)送過來的值。存放在temp中
? using (NamedPipeClientStream pipeClient = new NamedPipeClientStream(".", "testpipe", PipeDirection.InOut))
??????????? {
??????????????? pipeClient.Connect();
??????????????? using (StreamReader sr = new StreamReader(pipeClient))
??????????????? {
??????????????????? var data = new byte[10240];
??????????????????? data = System.Text.Encoding.Default.GetBytes("send to server");
??????????????????? pipeClient.Write(data, 0, data.Length);
??????????????????? string temp;
??????????????????? while ((temp = sr.ReadLine()) != null) ;
??????????????? }
??????????? }
末:以上簡短的兩段程序就實現(xiàn)了C#命名管道在進程間的雙向通信,簡單易懂。但是要實現(xiàn)完整的容錯和自定義通信協(xié)議,還是需要做很多的工作。
總結(jié)
以上是生活随笔為你收集整理的一个最简单的C#管道(NamePipe)全双工通信实例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 蓝桥杯-填空题-门牌制作
- 下一篇: AI 挖掘机解锁新技能:实现无人操作自主