C# 创建命名管道服务器
通过创建 NamedPipeServerStream 的一个新实例,来创建服务器。NamedPipeServerStream 派生自基类 PipeStream,PipeStream 派生自 Stream 基类,因此可以使用流的所有功能,例如,可以创建CryptoStream 或 GZipStream,把加密或压缩的数据写入命名管道。构造函数需要管道的名称,通过管道通信的多个进程可以使用该管道。
用于下面代码片段的第二个参数定义了管道的方向。服务器流用于读取,因此将方向设置为 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);
}
}
}
以下是可以用命名管道配置的其他一些选项:
● 可以把枚举 PipeTransmissionMode 设置为 Byte 或 Message。设置为Byte,就发送一个连续的流,设置为 Message,就可以检索每条消息。
● 使用管道选项,可以指定 WriteThrough 立即写入管道,而不缓存。
● 可以为输入和输出配置缓冲区大小。
● 配置管道安全性,指定谁允许读写管道。
● 可以配置管道句柄的可继承性,这对与子进程进行通信是很重要的。
因为 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;
}
}
C# 创建命名管道服务器相关推荐
- C++的创建命名管道(CreateNamedPipe)
一.命名管道(Named Pipes) 管道(Pipe)实际是用于进程间通信的一段共享内存,创建管道的进程称为管道服务器,连接到一个管道的进程为管道客户机.一个进程在向管道写入数据后,另一进程就可以从 ...
- java mkfifo_在Java中创建命名管道
我正在尝试使用Java创建命名管道.我正在使用Linux.但是,我遇到了写入管道的问题. File fifo = fifoCreator.createFifoPipe("fifo" ...
- 达梦dmrman dmap备份报[-7103]:创建命名管道失败
问题现象 关闭达梦数据库服务实例,用dmrman备份,数据库备份方式为DMAP辅助进程方式. [dmdba@localhost ~]$ DmServiceDMSERVER stop; Stopping ...
- java mkfifo_如何在Android中创建命名管道(mkfifo)?
Roosmaa's answer是正确的 - mkfifo()只是调用mknod()来创建一个特殊文件,而FAT32不支持它. 作为替代方案,您可能需要考虑使用Linux的"抽象命名空间&q ...
- 中断和执行子服务器,windows - 命名管道服务器,如何中断或超时等待客户端连接和传入数据 - 堆栈内存溢出...
一些真实的代码,用于演示GUI应用程序中管道服务器端的异步使用: void wait_for_object(HANDLE object) { DWORD dw; MSG msg; for (;;) { ...
- 【LINUX/UNIX网络编程】之使用消息队列,信号量和命名管道实现的多进程服务器(多人群聊系统)...
RT,使用消息队列,信号量和命名管道实现的多人群聊系统. 本学期Linux.unix网络编程的第三个作业. 先上实验要求: 实验三 多进程服务器 [实验目的] 1.熟练掌握进程的创建与终止方法: 2 ...
- android命名管道创建使用
#创建命名管道 #include <sys/stat.h> #include <stdio.h> #include <sys/types.h> #include & ...
- 进程间通信 —— 命名管道
管道包括三种: 1):普通管道PIPE,通常有很多限制,一是半双工,只能单向传输,二是只能在父子进程间使用 2):流管道:这种能双向传输,但是也是只能父子进程间使用. 3):命名管道,去除了以上的第二 ...
- windows命名管道
命名管道是通过网络来完成进程间的通信,它屏蔽了底层的网络协议细节. 将命名管道作为一种网络编程方案时,它实际上建立了一个C/S通信体系,并在其中可靠的传输数据.命名管道服务器和客户机的区别在于:服务器 ...
最新文章
- 日期不能交叉的检测算法
- js处理16进制hex转str出现的中文乱码问题
- vs怎么写html5页面,怎么使用vscode写html5
- oSIP开发者手册 (四)
- nodejs调用函数和模块
- NVIDIA英伟达:深度学习服务器搭建指南 | 交流会笔记
- CC2530无线点灯
- RNA剪接体 Spliceosome | 冷冻电镜 | 结构生物学
- java阿法狗国际象棋_[转帖]被阿法狗和AlphaZero刷屏之后,聊聊国际象棋和中国象棋AI...
- 思科关闭日志_思科交换机日志管理
- 关于centos7重启报错:[sdb] Assuming drive cache: write through [sda] Assuming drive 解决如下
- 撼龙图怎么开鸿蒙炁灵,一人之下藏金图技巧-一人之下撼龙藏金图高概率出绝世炁灵技巧...
- 云班课python答案_云班课测试题答案公众号
- Android--- Drawer and Tab Navigation with ViewPager
- 目前使用计算机的内存和外存,简述计算机内存和外存区别及常用外存有哪些
- FPGA实现的SPI协议(一)----SPI驱动
- Alluxio FUSE 实现原理
- 低功耗基础概念——isolation cell
- python 3d库_python的3d库
- Java 【案例5-3】 模拟用户注册
热门文章
- ffmpeg 保存图片 将rgb数据_FFMPEG 实现 YUV,RGB各种图像原始数据之间的转换(swscale)...
- 英特尔重入代工行业的底气和挑战,台积电,三星有点慌。
- 11个“高能”网站,学编程和赚钱两不误!
- 微信小程序分页功能(上拉触底事件)
- 背包模块的设计(日常任务模块, 武器排行榜, 战术, 英雄战斗力, 活动模块)
- 机电和计算机专业怎么选,计算机专业怎么选城口_竟成学校
- Zynq实现分布式Fir滤波器
- chapter7 面向对象之向上转型、向下转型及多态
- Win32游戏制作之---Bizzard
- 皮卡丘(pikachu) 文件上传