通过创建 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# 创建命名管道服务器相关推荐

  1. C++的创建命名管道(CreateNamedPipe)

    一.命名管道(Named Pipes) 管道(Pipe)实际是用于进程间通信的一段共享内存,创建管道的进程称为管道服务器,连接到一个管道的进程为管道客户机.一个进程在向管道写入数据后,另一进程就可以从 ...

  2. java mkfifo_在Java中创建命名管道

    我正在尝试使用Java创建命名管道.我正在使用Linux.但是,我遇到了写入管道的问题. File fifo = fifoCreator.createFifoPipe("fifo" ...

  3. 达梦dmrman dmap备份报[-7103]:创建命名管道失败

    问题现象 关闭达梦数据库服务实例,用dmrman备份,数据库备份方式为DMAP辅助进程方式. [dmdba@localhost ~]$ DmServiceDMSERVER stop; Stopping ...

  4. java mkfifo_如何在Android中创建命名管道(mkfifo)?

    Roosmaa's answer是正确的 - mkfifo()只是调用mknod()来创建一个特殊文件,而FAT32不支持它. 作为替代方案,您可能需要考虑使用Linux的"抽象命名空间&q ...

  5. 中断和执行子服务器,windows - 命名管道服务器,如何中断或超时等待客户端连接和传入数据 - 堆栈内存溢出...

    一些真实的代码,用于演示GUI应用程序中管道服务器端的异步使用: void wait_for_object(HANDLE object) { DWORD dw; MSG msg; for (;;) { ...

  6. 【LINUX/UNIX网络编程】之使用消息队列,信号量和命名管道实现的多进程服务器(多人群聊系统)...

    RT,使用消息队列,信号量和命名管道实现的多人群聊系统. 本学期Linux.unix网络编程的第三个作业. 先上实验要求: 实验三  多进程服务器 [实验目的] 1.熟练掌握进程的创建与终止方法: 2 ...

  7. android命名管道创建使用

    #创建命名管道 #include <sys/stat.h> #include <stdio.h> #include <sys/types.h> #include & ...

  8. 进程间通信 —— 命名管道

    管道包括三种: 1):普通管道PIPE,通常有很多限制,一是半双工,只能单向传输,二是只能在父子进程间使用 2):流管道:这种能双向传输,但是也是只能父子进程间使用. 3):命名管道,去除了以上的第二 ...

  9. windows命名管道

    命名管道是通过网络来完成进程间的通信,它屏蔽了底层的网络协议细节. 将命名管道作为一种网络编程方案时,它实际上建立了一个C/S通信体系,并在其中可靠的传输数据.命名管道服务器和客户机的区别在于:服务器 ...

最新文章

  1. 日期不能交叉的检测算法
  2. js处理16进制hex转str出现的中文乱码问题
  3. vs怎么写html5页面,怎么使用vscode写html5
  4. oSIP开发者手册 (四)
  5. nodejs调用函数和模块
  6. NVIDIA英伟达:深度学习服务器搭建指南 | 交流会笔记
  7. CC2530无线点灯
  8. RNA剪接体 Spliceosome | 冷冻电镜 | 结构生物学
  9. java阿法狗国际象棋_[转帖]被阿法狗和AlphaZero刷屏之后,聊聊国际象棋和中国象棋AI...
  10. 思科关闭日志_思科交换机日志管理
  11. 关于centos7重启报错:[sdb] Assuming drive cache: write through [sda] Assuming drive 解决如下
  12. 撼龙图怎么开鸿蒙炁灵,一人之下藏金图技巧-一人之下撼龙藏金图高概率出绝世炁灵技巧...
  13. 云班课python答案_云班课测试题答案公众号
  14. Android--- Drawer and Tab Navigation with ViewPager
  15. 目前使用计算机的内存和外存,简述计算机内存和外存区别及常用外存有哪些
  16. FPGA实现的SPI协议(一)----SPI驱动
  17. Alluxio FUSE 实现原理
  18. 低功耗基础概念——isolation cell
  19. python 3d库_python的3d库
  20. Java 【案例5-3】 模拟用户注册

热门文章

  1. ffmpeg 保存图片 将rgb数据_FFMPEG 实现 YUV,RGB各种图像原始数据之间的转换(swscale)...
  2. 英特尔重入代工行业的底气和挑战,台积电,三星有点慌。
  3. 11个“高能”网站,学编程和赚钱两不误!
  4. 微信小程序分页功能(上拉触底事件)
  5. 背包模块的设计(日常任务模块, 武器排行榜, 战术, 英雄战斗力, 活动模块)
  6. 机电和计算机专业怎么选,计算机专业怎么选城口_竟成学校
  7. Zynq实现分布式Fir滤波器
  8. chapter7 面向对象之向上转型、向下转型及多态
  9. Win32游戏制作之---Bizzard
  10. 皮卡丘(pikachu) 文件上传