当前位置: 首页 > news >正文

【C# 】Pipe管道通信使用

管道通信

        管道通信(Pipe Communication)可以用来在两个或多个进程之间传递数据。

        管道可以是匿名的也可以是有名的,有名管道允许不同进程间的通信,而匿名管道通常用于父子进程之间的通信。

        详细参考pipe管道通信原理_核间通信pipe通信-CSDN博客

 

管道实例

服务器端会创建一个命名管道并等待客户端连接,

客户端则会尝试连接到这个管道,并发送一条消息给服务器端,服务器端接收到消息后会打印出来。

服务器端代码 (PipeServer)

服务器端的代码可以写成方法,或是集成到需要的地方使用。参考代码如下:

using System;
using System.IO.Pipes;
using System.Text;class PipeServer
{static void Main(string[] args){using (NamedPipeServerStream pipeServer = new NamedPipeServerStream("MyPipeName", PipeDirection.InOut)){Console.WriteLine("Waiting for a client...");pipeServer.WaitForConnection(); // 等待客户端连接Console.WriteLine("Connected.");// 读取客户端发送的数据byte[] bytes = new byte[1024];int readBytes = pipeServer.Read(bytes, 0, bytes.Length);string data = Encoding.ASCII.GetString(bytes, 0, readBytes);Console.WriteLine($"Received: {data}");// 向客户端发送响应string response = "Hello back from the server!";byte[] responseBytes = Encoding.ASCII.GetBytes(response);pipeServer.Write(responseBytes, 0, responseBytes.Length);pipeServer.Flush();pipeServer.Disconnect(); // 断开连接}}
}

客户端代码 (PipeClient)

客户端的代码可以写成方法,或是集成到需要的地方使用。参考代码如下: 

using System;
using System.IO.Pipes;
using System.Text;class PipeClient
{static void Main(string[] args){using (NamedPipeClientStream pipeClient = new NamedPipeClientStream(".", "MyPipeName", PipeDirection.InOut)){pipeClient.Connect(1000); // 尝试连接,超时时间为1秒Console.WriteLine("Connected to server.");// 向服务器发送数据string message = "Hello from the client!";byte[] bytes = Encoding.ASCII.GetBytes(message);pipeClient.Write(bytes, 0, bytes.Length);pipeClient.Flush();// 读取服务器响应byte[] responseBytes = new byte[1024];int bytesRead = pipeClient.Read(responseBytes, 0, responseBytes.Length);string response = Encoding.ASCII.GetString(responseBytes, 0, bytesRead);Console.WriteLine($"Received from server: {response}");pipeClient.Close(); // 关闭管道}}
}

 在这个例子中,服务器和客户端都使用相同的管道名字 "MyPipeName" 进行通信。服务器首先创建管道并等待客户端连接,而客户端则尝试连接到服务器端创建的管道,并发送一个字符串消息。服务器和客户端都实现了读写操作,使得数据可以在两者之间双向流动。当客户端向服务器发送消息后,服务器会接收到消息并回发一条响应给客户端。同样地,客户端在发送消息后也会读取来自服务器的响应。

 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Java实现数据库图片上传(包含从数据库拿图片传递前端渲染)-图文详解
  • SSRF-labs-master靶场
  • FFmpeg研究
  • ai智能写作软件哪个好?高效写作少不了这5个
  • 大数据——Hive原理
  • mysql 数据库空间统计sql
  • 一条命令安装mysql,php
  • C++——从前序与中序遍历序列构造二叉树leetcode105
  • 网络安全管理制度
  • java算法day27
  • Android13 控制设置界面 双栏显示或单栏显示
  • go语言day18 reflect反射
  • 数仓建模:DWS层该如何建设?如何设计通用数据模型?
  • 分布式相关理论详解
  • 什么是贝叶斯优化(Bayesian Optimization)?
  • 9月CHINA-PUB-OPENDAY技术沙龙——IPHONE
  • angular2开源库收集
  • Git初体验
  • Javascript基础之Array数组API
  • JS创建对象模式及其对象原型链探究(一):Object模式
  • js中forEach回调同异步问题
  • Laravel 中的一个后期静态绑定
  • 开放才能进步!Angular和Wijmo一起走过的日子
  • 前言-如何学习区块链
  • 如何利用MongoDB打造TOP榜小程序
  • 栈实现走出迷宫(C++)
  • ​ 全球云科技基础设施:亚马逊云科技的海外服务器网络如何演进
  • ​如何防止网络攻击?
  • #我与Java虚拟机的故事#连载04:一本让自己没面子的书
  • (1)svelte 教程:hello world
  • (3)(3.5) 遥测无线电区域条例
  • (C++二叉树05) 合并二叉树 二叉搜索树中的搜索 验证二叉搜索树
  • (回溯) LeetCode 46. 全排列
  • ****Linux下Mysql的安装和配置
  • *_zh_CN.properties 国际化资源文件 struts 防乱码等
  • .NET “底层”异步编程模式——异步编程模型(Asynchronous Programming Model,APM)...
  • .net core webapi 大文件上传到wwwroot文件夹
  • .net 调用海康SDK以及常见的坑解释
  • .NET6 命令行启动及发布单个Exe文件
  • .NET开发不可不知、不可不用的辅助类(三)(报表导出---终结版)
  • .net利用SQLBulkCopy进行数据库之间的大批量数据传递
  • .so文件(linux系统)
  • @德人合科技——天锐绿盾 | 图纸加密软件有哪些功能呢?
  • [ 隧道技术 ] cpolar 工具详解之将内网端口映射到公网
  • [.net] 如何在mail的加入正文显示图片
  • [001-03-007].第07节:Redis中的管道
  • [BZOJ3223]文艺平衡树
  • [C]整形提升(转载)
  • [Design Pattern] 工厂方法模式
  • [FxCop.设计规则]8. 也许参数类型应该是基类型
  • [IE 技巧] 显示/隐藏IE 的菜单/工具栏
  • [java后端研发]——文件上传与下载(2种方式)
  • [Linux#42][线程] 锁的接口 | 原理 | 封装与运用 | 线程安全
  • [linux] shell中的()和{}
  • [NCTF 2022] web题解