C# 創建命名管道服務器

9e68365c615f393c8f1bee813c342500.png

通過創建 NamedPipeServerStream 的一個新實例,來創建服務器。NamedPipeServerStream 派生自基類 PipeStream,PipeStream 派生自 Stream 基類,因此可以使用流的所有功能,例如,可以創建CryptoStream 或 GZipStream,把加密或壓縮的數據寫入命名管道。構造函數需要管道的名稱,通過管道通信的多個進程可以使用該管道。

828aa3cc8fe2bef5856dd0f5988a94ec.png

用于下面代碼片段的第二個參數定義了管道的方向。服務器流用于讀取,因此將方向設置為 PipeDirection.In。命名管道也可以是雙向的,用于讀寫,此時使用PipeDirection.InOut。匿名管道只能是單向的。接下來,調用WaitForConnection()方法,命名管道等待寫入方的連接。然后,在一個循環中(直到收到消息“bve”),管道服務器把消息讀入緩沖區數組,把消息寫到控制臺:

private static void PipesReader(string pipeName)
{try{using (var pipeReader =new NamedPipeServerStream(pipeName, PipeDirection.In)){pipeReader.WaitForConnection();Console.WriteLine ("reader connected"); const int BUFFERSIZE = 256; bool completed = false; while (!completed){byte[] buffer = new byte[BUFFERSIZE];int nRead = pipeReader.Read(buffer, 0, BUFFERSIZE);string line = Encoding.UTF8.GetString(buffer, 0, nRead); Console.WriteLine(line);if (line == "bye") completed = true;}}Console.WriteLine("completed?reading");?Console.ReadLine();}catch (Exception ex){Console.WriteLine(ex.Message);}}
}

870949fbfefc7e84362d6cff55ab1556.png

以下是可以用命名管道配置的其他一些選項:

●? 可以把枚舉 PipeTransmissionMode 設置為 Byte 或 Message。設置為Byte,就發送一個連續的流,設置為 Message,就可以檢索每條消息。

●? 使用管道選項,可以指定 WriteThrough 立即寫入管道,而不緩存。

●? 可以為輸入和輸出配置緩沖區大小。

●? 配置管道安全性,指定誰允許讀寫管道。

●? 可以配置管道句柄的可繼承性,這對與子進程進行通信是很重要的。

c6a722270baf11f94db7bdd3aba0ca31.png

因為 NamedPipeServerStream 是一個流,所以可以使用 StreamReader,而不是讀取字節數組,該方法簡化了代碼:

var?pipeReader?=?new?NamedPipeServerStream(pipeName, PipeDirection.In);?
using?(var?reader?=?new?StreamReader(pipeReader))
{pipeReader.WaitForConnection();Console.WriteLine("reader?connected");?bool?completed?=?false;?while (!completed){string line = reader.ReadLine(); Console.WriteLine(line);if (line == "bye") completed = true; }
}

49b4810b251c103a2504ffc3fb1355f6.png

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/287857.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/287857.shtml
英文地址,請注明出處:http://en.pswp.cn/news/287857.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

在香蕉派 Banana Pi BPI-M1上使用 開源 OxOffice Impress

2019獨角獸企業重金招聘Python工程師標準>>> 在香蕉派 Banana Pi BPI-M1上使用 開源 OxOffice Impress 在Banana Pi BPI-M1上使用OxOffice Impress,該簡報大小約26MB,採用自動播放機制。 OxOffice提供 arm linux的版本,可佈署在ar…

免殺新姿勢:利用線程將惡意代碼注入到內存中

本文講的是免殺新姿勢:利用線程將惡意代碼注入到內存中,產生存放遠程攻擊線程的進程在這篇文章中我不想一步一步解釋我編寫的C#代碼,但是我會展示下它能夠繞過殺毒軟件,并且操作非常簡單,而且實用。 首先說明一下&…

【經典回放】多種語言系列數據結構算法:希爾排序

【希爾排序原理】每隔sp(整數)個數即取數并判斷大小,交換,先構造局部有序序列,直到sp為1,構造完整的有序序列。 給出一組數據,如下: 0 1 2 3

Java之解決散列表的沖突用開放定址法和鏈表法

1 問題 理想狀態下,散列表就是一個包含關鍵字的固定大小的數組,通過使用散列函數,將關鍵字映射到數組的不同位置,哈希函數可以將關鍵字均勻的分散到數組的不同位置,不會出現兩個關鍵字散列值相同(假設關鍵…

python 手把手教你基于搜索引擎實現文章查重

前言 文章抄襲在互聯網中普遍存在,很多博主都收受其煩。近幾年隨著互聯網的發展,抄襲等不道德行為在互聯網上愈演愈烈,甚至復制、黏貼后發布標原創屢見不鮮,部分抄襲后的文章甚至標記了一些聯系方式從而使讀者獲取源碼等資料。這…

lru算法實現 redis_使用數組與雙向鏈表實現一個簡單的LRU算法

什么是LRU算法?redis大家都玩過吧,你們好奇redis內存數據存滿之后會發生什么嗎?拋出異常?禁止使用?還是刪除數據?其實redis設計了一種內潤淘汰機制。noeviction(默認策略):屏蔽寫操作&#xff0…

【經典回放】多種語言系列數據結構算法:歸并排序

目錄 干貨1:C#語言實現歸并排序! 干貨2:C語言實現歸并排序! 干貨1:C#語言實現歸并排序! 一、算法 1、思想基礎

Java對象和類

轉自原文:http://www.yiibai.com/java/java_object_classes.html java是一種面向對象的語言。由于具有面向對象特性的語言,Java支持以下基本概念: 多態性繼承封裝抽象化類對象實例方法消息解析在本章中,我們將探討類和對象這些概念…

bzoj3224 Tyvj 1728 普通平衡樹題解--Treap

題面: Description您需要寫一種數據結構(可參考題目標題),來維護一些數,其中需要提供以下操作: 1. 插入x數 2. 刪除x數(若有多個相同的數,因只刪除一個) 3. 查詢x數的排名(若有多個相同的數&…

Blazor University (18)使用 RenderFragments 模板化組件 —— 創建 TabControl

原文鏈接:https://blazor-university.com/templating-components-with-renderfragements/creating-a-tabcontrol/創建一個 TabControl 組件源代碼[1]接下來我們將創建一個 TabControl 組件。這將教您如何實現以下目標:將數據傳遞到 RenderFragment 以為其…

Java之GC機制

1 JVM基本結構 1)類加載器classLoader:在JVM啟動時或者類運行時將需要的.class文件加載到內存中 2)內存區域(運行時數據區): 是在JVM運行的時候操作所分配的內存區 3)執行引擎:負…

ArcGIS實驗教程——實驗十八:疊置分析(Overlay Analysis)

ArcGIS實驗視頻教程合集:《ArcGIS實驗教程從入門到精通》(附配套實驗數據) 目 錄 一、實驗描述 二、實驗內容 三、實驗目的 四、實驗數據

《零基礎看得懂的C語言入門教程 》——(一)脫離學習誤區

本節視頻連接: https://www.bilibili.com/video/BV1Qv411t7ae 新手C語言學習有些誤區你應該知道,這樣學習起來事半功倍~一、前言 距離上一次編寫C語言的教程是5年前了(2015年),由于自己是從初一時開始學習編程&#…

一套完整的導視設計案例_色彩導視藝術:烏克蘭基輔語言學校導視設計案例

學校導視設計案例建筑師Emil Dervish為烏克蘭基輔Underhub語言學校設計了色彩繽紛的導視系統,該設計靈感來源于倫敦地鐵,他希望通過彩色線條的大膽應用來營造輕松而歡樂的氛圍。讓我們一起來看看這座由“彩虹”做導視的學校。彩虹導視設計跟著紅色導視線…

C# 創建匿名管道

下面對匿名管道執行類似的操作。通過匿名管道,創建兩個彼此通信的任務。為了給管道的創建發出信號,使用 ManualResetEventSlim 對象,與內存映射文件一樣。在 Program 類的 Run 方法中,創建兩個任務,調用 Reader 和 Wri…

內測投票

create table DiaoYanTiMu (  Ids int(10) auto_increment not null primary key(),//把所需要的都寫上中間不需要符號隔開,設自增長列類型必須是int,主鍵的話必須不能為空not null, Title varchar(50) not null );/…

Android之通過Binder機制實現IPC和linux的傳統IPC的對比分析

一、 Android的Binder機制實現IPC 這里bind機制實現實現IPC模型這里不具體分析,簡單理解就是clint-server模型 涉及到4個模塊client、server、serverManager、bind底層驅動。 serverManager的作用是將字符形式的Binder(Server創建了Binder實體)名字轉化成Client中對該Bin…

Mysql 查詢統計練習

2019獨角獸企業重金招聘Python工程師標準>>> 1、建表 customers 顧客表 products 產品表 orders 訂單表 -- 顧客表 CREATE TABLE customers (c_id INT NOT NULL AUTO_INCREMENT,lastname VARCHAR(255),firstname VARCHAR(255),address VARCHAR(255),birthday DATETI…

【經典回放】多種語言系列數據結構算法:堆排序

目錄 一、堆排序算法分析 二、C#語言實現堆排序 三、C語言實現堆排序 一、堆排序算法分析

C++11模版元編程的應用

1.概述 關于C11模板元的基本用法和常用技巧,我在程序員2015年2月B《C11模版元編程》一文(后稱前文)中已經做了詳細地介紹,那么C11模版元編程用來解決什么實際問題呢,在實際工程中又該如何應用呢?本文將側重…