亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

使用命名管道實現進程間通信

2019-11-14 15:54:01
字體:
來源:轉載
供稿:網友

創建命名管道

命名管道常常用于應用程序之間的通迅,由于不需要進行序列化和反序列化操作,效率是非常高的。相比TCP通信方式,效率更高,但比共享內存要低點。
命名管道可以在本地機器或者局域網內機器實現進程間通信,所以是最佳的通信方式。

創建一個NamedPipeServerStream:

NamedPipeServerStream pipeServer = new NamedPipeServerStream(_pipName, PipeDirection.InOut, 10);

這里表示命名管道服務器的管道放心為雙向通信,類似于TCP雙工。接著,使用下面的代碼等待連接:

pipeServer.WaitForConnection();

如果有連接,就可以使用流閱讀器進行閱讀:

 StreamReader sr = new StreamReader(pipeServer);

同樣,也可以使用流寫操作器,將數據寫入流,管道的另一端,可以讀取這個流:

 using (StreamWriter sw = new StreamWriter(pipeServer)) {       sw.AutoFlush = true;       sw.WriteLine("hello world " + str); }

注意:此處使用了using,意味著寫完就會關閉流,但同時也會關閉管道,所以需要注意。假如客戶端要讀取全部數據,那么需要等到這里關閉流。

自定義應用層通信協議

如何讀取管道的全部數據,看下面的代碼:

 StreamReader sr = new StreamReader(pipeServer); string text =sr.ReadToEnd();

這種方式可以讀取全部數據,但是,在管道的另外一段,如果留寫操作器不調用 Close方法,這里沒法讀取完成,程序會阻塞在這里。 所以,必須定義一個“應用協議”,客戶端告訴服務端合適結束讀取數據。

我們仿照HTTP協議的方法,使用連續的2個以上的回車換行表示HTTP頭信息結束,我們也這樣定義,并附加其它標記來表示流數據發送完畢,參考發送端:

 public string Query(string request)        {            if (!_pipeClient.IsConnected)            {                _pipeClient.Connect(10000);            }            StreamWriter sw = new StreamWriter(_pipeClient);            sw.WriteLine(request);            sw.WriteLine();//連續2個換行外加"#END"表示結束            sw.WriteLine();            sw.WriteLine("#END");            sw.Flush();            StreamReader sr = new StreamReader(_pipeClient);            string returnVal = sr.ReadToEnd();            return returnVal;        }

而在服務端,采用下面的方式完成流數據的讀取:

string str = null; string strAll = null; System.Text.StringBuilder sb = new System.Text.StringBuilder(); StreamReader sr = new StreamReader(pipeServer); while (pipeServer.CanRead && (null != (str = sr.ReadLine()))) {          //當遇到連續2個換行外加#END,表示輸入結束     if (str == "#END" )     {         strAll = sb.ToString();         if (strAll.EndsWith("/r/n/r/n"))             break;     }     else     {         if (str == "")             sb.AppendLine();         else             sb.AppendLine(str);     } } strAll = strAll.Substring(0, strAll.Length - "/r/n/r/n/r/n".Length);

測試和下載

最后,寫個客戶端和服務端控制臺程序:

namespace NamePipedSample_Server{    class PRogram    {        static void Main(string[] args)        {            NamedPipeListenServer svr = new NamedPipeListenServer("test");            svr.Run();            Console.Read();        }    }}
namespace NamePipedSample_Client{    class Program    {        static void Main(string[] args)        {            string sendStr = null;            using (NamedPipeClient client = new NamedPipeClient(".", "test"))            {                sendStr = "fff/r/ndddd/r/n";                Console.WriteLine("send:{0}",sendStr);                Console.WriteLine("Reply:{0}",client.Query(sendStr));                sendStr = "54353";                Console.WriteLine("send:{0}", sendStr);                Console.WriteLine("Reply:{0}", client.Query(sendStr));                sendStr = "aaaaaaa";                Console.WriteLine("send:{0}", sendStr);                Console.WriteLine("Reply:{0}", client.Query(sendStr));            }            Console.WriteLine("send all ok.");            Console.Read();        }    }}

 跨機器使用命名管道


上面的程序在本地機器使用沒問題的,但是跨機器可能會遇到問題,在使用的時候,需要將主機名字 "." 替換成
實際的局域網主機名字,例如:

using (NamedPipeClient client = new NamedPipeClient("user-xxxPc", "test")){ //}

但是這樣可能還是無法訪問,會報下面的錯誤:

“System.IO.IOException”類型的未經處理的異常在 System.Core.dll 中發生 其他信息: 登錄失敗: 未知的用戶名或錯誤密碼。

此時需要在客戶機器上,地址欄里面輸入下面的地址: //user-xxxPc

此時會提示輸入用戶名,密碼,最后勾選 “記住賬號”,下次即可使用了。

 

經過測試,這種方法是先命名管道客戶端-服務器通信成功。 本文程序是在網友原來文章的基礎上改進的,在此表示感謝,原文地址:  http://blog.csdn.net/educast/article/details/7219774

本文程序Demo下載

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲综合中文字幕68页| 色婷婷综合久久久久中文字幕1| 精品视频在线播放色网色视频| 国产精品视频免费在线观看| 国产欧美精品一区二区三区-老狼| 久久99精品久久久久久青青91| 亚洲成人亚洲激情| 久久国产精品偷| 精品视频在线观看日韩| 亚洲二区中文字幕| 日韩中文字幕久久| 黄色成人在线免费| 精品久久久久久中文字幕一区奶水| 国产精品久久久一区| 亚洲精品欧美日韩专区| 国产97在线亚洲| 九九精品视频在线| 亚洲人成自拍网站| 国产亚洲人成a一在线v站| 国产精品h在线观看| 成人黄色免费看| 国产成人av在线播放| 欧美专区在线视频| 日韩一区二区福利| 亚州国产精品久久久| 黑人巨大精品欧美一区二区| 日韩中文字幕久久| 亚洲专区国产精品| 国产91九色视频| 97视频在线观看免费高清完整版在线观看| 久久免费视频网| 亚洲网址你懂得| 亚洲电影免费观看高清完整版在线观看| 精品欧美激情精品一区| 久久久www成人免费精品| 神马国产精品影院av| 伊人伊成久久人综合网小说| 在线观看视频99| 精品高清美女精品国产区| 2023亚洲男人天堂| www.日本久久久久com.| 日本成人精品在线| 亚洲网在线观看| 欧美亚洲另类视频| 在线看日韩欧美| 色婷婷综合久久久久中文字幕1| 久久久精品亚洲| 欧美一区二区色| 精品成人在线视频| 久久久视频免费观看| 久久久久久av| 欧美第一黄色网| 中文字幕亚洲一区| 精品动漫一区二区三区| 欧美日韩在线看| 亚洲欧美日韩精品久久| 欧美尤物巨大精品爽| 亚洲色图狂野欧美| 久久国产视频网站| 亚洲男女自偷自拍图片另类| 国产亚洲欧美aaaa| 久久精品国产2020观看福利| 色综合天天狠天天透天天伊人| 欧美成人黑人xx视频免费观看| 久久久精品久久久| 中日韩美女免费视频网站在线观看| 中文字幕亚洲综合| 欧美成人剧情片在线观看| 日韩成人性视频| 日韩精品中文字幕视频在线| 久久精品美女视频网站| 国产婷婷成人久久av免费高清| 亚洲人成亚洲人成在线观看| 久久精品视频在线观看| 亚洲片在线观看| 精品国产一区二区三区久久久狼| 亚洲一区二区三区成人在线视频精品| 久久久中精品2020中文| 亚洲人成电影网站| 日韩在线免费视频观看| 欧美精品免费看| 欧美精品成人91久久久久久久| 亚洲色图狂野欧美| 精品无人区太爽高潮在线播放| 91精品视频专区| 91精品国产九九九久久久亚洲| 久久久久久久成人| 欧美国产日韩xxxxx| 国产精品99导航| 91美女片黄在线观| 亚洲欧洲高清在线| 91国内在线视频| 欧美成人免费在线视频| 岛国视频午夜一区免费在线观看| xxxxx91麻豆| 丝袜一区二区三区| 欧美亚洲在线视频| 久久久久女教师免费一区| 超碰91人人草人人干| 亚洲一区二区三区乱码aⅴ| 日韩成人在线电影网| 国产一区二区色| 九色精品免费永久在线| 欧美性极品xxxx做受| 亚洲一区二区久久久久久久| 亚洲国产精品久久91精品| 成人免费看片视频| 国产精品一区二区久久久久| 亚洲国产精品网站| 亚洲精品短视频| 亚洲伦理中文字幕| 久久综合久中文字幕青草| 亚洲精品乱码久久久久久金桔影视| 91免费精品视频| 亚洲视频电影图片偷拍一区| 国产精品一区二区三区久久| 精品久久久久久中文字幕一区奶水| 狠狠色香婷婷久久亚洲精品| 国产成人在线一区| 日韩精品免费在线视频观看| 欧美国产日产韩国视频| 97精品国产aⅴ7777| 51视频国产精品一区二区| 日韩成人在线视频网站| 欧美性xxxx极品高清hd直播| 亚洲国产成人一区| 欧美激情综合色综合啪啪五月| 国产精品嫩草影院久久久| 欧美人与性动交a欧美精品| 久久视频免费在线播放| 日韩欧美国产视频| 91日本在线视频| 欧美激情欧美激情在线五月| 久久人人97超碰精品888| 欧美在线性爱视频| 欧美专区在线观看| 日本久久久久久久久| 中文字幕日韩精品在线观看| 亚洲最大的网站| 亚洲的天堂在线中文字幕| 国产999视频| 庆余年2免费日韩剧观看大牛| 国产aaa精品| 波霸ol色综合久久| 国产美女久久久| 国产精品久久久久久久久粉嫩av| 日韩精品免费综合视频在线播放| 成人精品视频久久久久| 怡红院精品视频| …久久精品99久久香蕉国产| 久久国产加勒比精品无码| 国产精品视频网站| 中文欧美日本在线资源| 欧美亚洲另类制服自拍| 午夜精品一区二区三区视频免费看| 久久成人18免费网站| 亚洲最大成人免费视频| 日韩精品小视频| 色噜噜国产精品视频一区二区| 欧美日韩一区二区在线| 另类天堂视频在线观看| 久久久综合av| 成人免费高清完整版在线观看| 欧美一级视频免费在线观看|