日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

一个最简单的C#管道(NamePipe)全双工通信实例

發(fā)布時間:2023/12/4 综合教程 30 生活家
生活随笔 收集整理的這篇文章主要介紹了 一个最简单的C#管道(NamePipe)全双工通信实例 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

?????? 命名管道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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。