命名管道NamedPipe,可以用于进程间通信。本文创建两个exe工程,做为两个进程。一个为管道客户端,一个为管道服务端。互为双向通信。例子摘自MSDN。用控制台或者winForm,启动时,调用对应的函数,并打好断点就可以做测试了。

首先需要引用命名空间,using System.IO;   using System.IO.Pipes;

注:下面读写用了两种方式。

1)服务端

a.使用using非托管释放。管道名称是testpipe。而工作方式是双向的InOut。

b.等待连接时阻塞的,直到客户端连接进来。

c.pipeServer.Read也是阻塞的,等待接收客户端发送的消息,数据存在data中。

d.创建一个streamWriter并向客户端发送数据

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非托管释放。创建客户端。

b.连接到服务端,调用Connect的时候,服务端如果有断点可以看到跳转到了waitForConnection下面。

c.使用pipeClient.Write向服务端发送值,服务端的pipeServer.Read响应。

d.创建一个StreamReader ,接收服务端发送过来的值。存放在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) ;
                }
            }

末:以上简短的两段程序就实现了C#命名管道在进程间的双向通信,简单易懂。但是要实现完整的容错和自定义通信协议,还是需要做很多的工作。

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

  1. socketpair创建双向通信的管道(全双工通信)

    欢迎访问个站,你想要的,可能这里有 首页_码到城攻码到城攻分享但不限于IT技术经验技巧.软硬资源.所闻所见所领会等,站点提供移动阅读.文章搜索.在线留言.支付打赏.个人中心.免签支付等功能https: ...

  2. 使用命名管道进程之间通信(转)

    原文地址:http://www.cnblogs.com/yukaizhao/archive/2011/08/04/system-io-pipes.html 命名管道: 命名管道的功能比匿名管道更强大, ...

  3. Linux-C语言-利用有名管道简单实现两个进程间的全双工通信

    有名管道特点: 1.有名管道是对无名管道的改进,它可以使互不相关的两个进程互相通信,并且在文件系统中可见,可以通过文件名来找到. 2.半双工的通信方式,进程通过文件IO来操作有名管道. 3.有名管道遵 ...

  4. 区块链100讲:Truffle——一个更简单的部署智能合约的方法

    本期<区块链100讲>我们将介绍一个更简单的部署智能合约的方法:Truffle. 1 什么是Truffle ? Truffle是针对基于以太坊的Solidity语言的一套开发框架.本身基于 ...

  5. Centos 6.5下一个SNMP简单配置(snmp protocol v3,监控宝)

    Centos 6.5下一个SNMP简单配置(snmp protocol v3.监控宝) jom_ch@2014/7/25 1,安装 >yum -y install net-snmp net-sn ...

  6. php 自定义超全局,一个超级简单的 PHP 超全局变量管理扩展

    一个超级简单的 PHP 超全局变量管理扩展(自卖自夸) 介绍 SG 全称 Superglobals,它的诞生为了方便快捷操作 PHP 预定义的超全局变量,用户定义的超全局变量. 如果在非 CLI 模式 ...

  7. html制作nba网页,NBA篮球_实用电脑小技巧:通俗解答html 自己动手建一个非常简单的网页_沪江英语...

    沪江小编:对于很多人来说,电脑应该算是使用频率最高的工具了,可是你真的会用电脑么?实用电脑小技巧,用最简单明了的方式给你无比有趣的电脑使用新体验. html是什么,什么是html通俗解答: 通俗的讲h ...

  8. 欢迎大家讨论:只想要一个最简单的XXX系统,功能最简化的XXX系统

    我们国人总有一种思想,能简化的简化,但是往往我们把真正应该简单化的东西反而没简单化,例如我们的人际关系.一些比较传统的封建思想,往往这些最应该简化的东西是更加搞得深入.复杂. 其实很多东西是简化不来的 ...

  9. 教师节html源码,教师节_实用电脑小技巧:通俗解答html 自己动手建一个非常简单的网页_沪江英语...

    沪江小编:对于很多人来说,电脑应该算是使用频率最高的工具了,可是你真的会用电脑么?实用电脑小技巧,用最简单明了的方式给你无比有趣的电脑使用新体验. html是什么,什么是html通俗解答: 通俗的讲h ...

最新文章

  1. 空空排错日志:OCS错误日志14501等解决办法
  2. 50个查询系列-第二个查询
  3. 【最详细】数据结构(C语言版 第2版)第七章课后习题答案 严蔚敏 等 编著
  4. 【opencv图像基础】图像常见的通道模式:RGB、YUV、HSV
  5. 双步位移求解特征值matlab,数值分析——带双步位移的QR分解求特征值算法
  6. python处理select
  7. 2019最新资料!共7T
  8. ftp/sftp定时自动上传文件脚本(CentOS)
  9. Linux下的Vivado安装——以Ubuntu为例
  10. bios error 装系统acpi_win10系统升级后开机提示acpi bios error的解决方法
  11. linux最好的mp4软件,【良心推荐】5款好用的MP4视频编辑器
  12. pano2vr 制作交互热点模板时常显示文字
  13. Tomcat重启服务器
  14. 论文阅读-Detecting and Recovering Sequential DeepFake Manipulation(SeqFakeFormer)
  15. MFI认证与PPID
  16. Python之Jacobi迭代计算
  17. 面部刮痧:别样的美丽疗法
  18. 为什么 Storm 比 Hadoop 快?是由哪几个方面决定的?
  19. Linux如何使用WIFI连接abd
  20. 图像超分算法小合集二:FSRCNN、DRCN、RDN、EDSR

热门文章

  1. 标题: 巧用curl代替ez-ipupdate更新动态dns[zt]
  2. GPL/wide-dhcpv6/dhcp6c源代码分析
  3. 2020秋季C语言练习题(4)
  4. 微软官方WM6智能手机模拟器
  5. OpenCV 学习笔记(模板匹配)
  6. [开启C语言秃头之旅]扫雷游戏
  7. freemarker将xml转为html,Freemarker 实现Html 静态化
  8. TuneUp Utilities 2013 序列号
  9. 百度API调用失败解决方法
  10. SDHC(高容量SD存储卡)