命名管道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)全双工通信实例
给对象的小惊喜c#玫瑰花
C#/.NET/.NET Core推荐学习书籍(24年4月更新,已分类)
七孔梅花管通信管道施工方案
C# .NET鲜花配送系统
C#桌面玫瑰花程序情人节玫瑰花礼物 源码可以直接运行
字符串(C# 编程指南)
字符串基础(C# 编程指南)
C#中用户注册和登录的实现
C#socket通信(服务器端与客户端实现简单的聊天室通信)
网址: 一个最简单的C#管道(NamePipe)全双工通信实例 https://m.huajiangbk.com/newsview1681205.html
上一篇: PHP命名空间和自动加载类 |
下一篇: Cadence中库的命名规则 |