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

C# 命名管道NamedPipeServerStream使用

NamedPipeServerStream 是 .NET Framework 和 .NET Core 中提供的一个类,用于创建和操作命名管道的服务器端。命名管道是一种在同一台计算机上或不同计算机之间进行进程间通信的机制。

命名管道允许两个或多个进程通过共享的管道进行通信。其中一个进程充当服务器,创建管道并等待客户端连接。其他进程充当客户端,连接到服务器创建的管道,并通过管道进行数据交换。

NamedPipeServerStream 类提供了创建命名管道服务器端的功能。它允许你指定管道的名称、方向(输入、输出或双向)和一些其他选项。一旦服务器端创建并等待连接,客户端可以使用 NamedPipeClientStream 类连接到该管道,并进行数据交换。

本次只演示客户端-服务端通讯:

服务端: 

/// <summary>/// 服务端/// </summary>public partial class FrmTest : Form{private NamedPipeServerStream pipeServer;volatile bool _receive = true;public FrmTest(){InitializeComponent();// 连接到命名管道pipeServer = new NamedPipeServerStream("Test", PipeDirection.In);Thread thread = new Thread(() =>{while (_receive){try{if(!pipeServer.IsConnected){Console.WriteLine("等待客户端连接。。。");pipeServer.WaitForConnection();Console.WriteLine("客户端已连接。。。");}// 读取字节大小byte[] sizeBuffer = new byte[sizeof(int)];pipeServer.Read(sizeBuffer, 0, sizeBuffer.Length);int messageSize = BitConverter.ToInt32(sizeBuffer, 0);// 消息内容byte[] responseBytes = new byte[messageSize];Console.WriteLine("等待客户端发送消息。。。");int bytesRead = pipeServer.Read(responseBytes, 0, responseBytes.Length);Console.WriteLine("客户端已发送消息。。。");string response = Encoding.UTF8.GetString(responseBytes, 0, bytesRead);this.ExecBeginInvoke(() =>{this.richTextBox1.AppendText(DateTime.Now.ToStringFromDateTime() + ":\r\n" + response + "\r\n");});pipeServer.Disconnect();}catch (Exception ex){Trace.WriteLine(ex.Message+"\r\n"+ex.StackTrace);}finally{}}});thread.Start();}private void button1_Click(object sender, System.EventArgs e){}private void FrmTest_FormClosing(object sender, FormClosingEventArgs e){_receive = false;if (pipeServer.IsConnected){pipeServer.Disconnect();}// 关闭管道pipeServer.Close();this.Dispose();Application.ExitThread();Application.Exit();Process.GetCurrentProcess().Kill();}private void FrmTest_FormClosed(object sender, FormClosedEventArgs e){}}

客户端: 

/// <summary>/// 客户端/// </summary>public partial class FrmTest : Form{public FrmTest(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){string msg = this.richTextBox1.Text;// 连接到命名管道服务器using (NamedPipeClientStream clientStream = new NamedPipeClientStream(".", "Test", PipeDirection.Out)){try{Console.WriteLine("等待连接到服务器");clientStream.Connect(5000);Console.WriteLine("已连接到服务器");// 向服务器发送消息string message = msg;byte[] messageBytes = Encoding.UTF8.GetBytes(message);byte[] msgSize = Encoding.UTF8.GetBytes(messageBytes.Length.ToString());clientStream.Write(msgSize, 0, msgSize.Length);clientStream.Write(messageBytes, 0, messageBytes.Length);Console.WriteLine("已发送消息至服务器");}catch(Exception ex){Console.WriteLine("连接超时。。。");}finally{clientStream.Close();}}}private void FrmTest_FormClosing(object sender, FormClosingEventArgs e){this.Dispose();Application.ExitThread();Application.Exit();}}

相关文章:

  • Spring依赖注入
  • 响应式Web开发项目教程(HTML5+CSS3+Bootstrap)第2版 例5-3 getBoundingClientRect()
  • 【基础算法练习】单调队列与单调栈模板
  • LabVIEW扫频阻抗测试系统
  • 回归预测 | MATLAB实现PSO-GRNN粒子群优化广义回归神经网络多输入单输出预测(含优化前后预测可视化)
  • vue 跨域XMLHttpRequest
  • 如何使用 WebRTC 与 Kurento 建立视频会议 App
  • 如何成为一个更好的沟通者?
  • 粒子群优化算法(Particle Swarm Optimization,PSO)求解基于移动边缘计算的任务卸载与资源调度优化(提供MATLAB代码)
  • navicat连接postgresql、人大金仓等数据库报错
  • 带libc源码gdb动态调试(导入glibc库使得可执行文件动态调试时可看见调用库函数源码)
  • 【Vue实用功能】Vue实现文档在线预览功能,在线预览PDF、Word等office文件
  • [MQ]常用的mq产品图形管理web界面或客户端
  • MySQL数据导入:MySQL 导入 Excel 文件.md
  • vue预览pdf文件的几种方法
  • 0基础学习移动端适配
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友
  • Apache Pulsar 2.1 重磅发布
  • create-react-app做的留言板
  • git 常用命令
  • JAVA_NIO系列——Channel和Buffer详解
  • Linux gpio口使用方法
  • Linux各目录及每个目录的详细介绍
  • PhantomJS 安装
  • SpringCloud集成分布式事务LCN (一)
  • 从地狱到天堂,Node 回调向 async/await 转变
  • 后端_MYSQL
  • 实现简单的正则表达式引擎
  • 手写双向链表LinkedList的几个常用功能
  • 王永庆:技术创新改变教育未来
  • 掌握面试——弹出框的实现(一道题中包含布局/js设计模式)
  • ​ssh免密码登录设置及问题总结
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • (02)vite环境变量配置
  • (16)Reactor的测试——响应式Spring的道法术器
  • (备忘)Java Map 遍历
  • (蓝桥杯每日一题)平方末尾及补充(常用的字符串函数功能)
  • (七)微服务分布式云架构spring cloud - common-service 项目构建过程
  • (一)UDP基本编程步骤
  • (转)大型网站的系统架构
  • (转载)OpenStack Hacker养成指南
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**
  • ... 是什么 ?... 有什么用处?
  • .NET Core WebAPI中封装Swagger配置
  • .vollhavhelp-V-XXXXXXXX勒索病毒的最新威胁:如何恢复您的数据?
  • [ 2222 ]http://e.eqxiu.com/s/wJMf15Ku
  • [04] Android逐帧动画(一)
  • [Android实例] 保持屏幕长亮的两种方法 [转]
  • [Angularjs]asp.net mvc+angularjs+web api单页应用之CRUD操作
  • [Asp.net MVC]Bundle合并,压缩js、css文件
  • [bbk5179]第66集 第7章 - 数据库的维护 03
  • [BPU部署教程] 教你搞定YOLOV5部署 (版本: 6.2)
  • [BZOJ1008][HNOI2008]越狱
  • [C++]模板与STL简介
  • [CareerCup] 6.1 Find Heavy Bottle 寻找重瓶子