首页 > 编程语言 >【C# 】Pipe管道通信使用

【C# 】Pipe管道通信使用

时间:2024-07-27 20:53:35浏览次数:16  
标签:responseBytes 服务器端 C# bytes Pipe 管道 using 客户端

管道通信

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

 

标签:responseBytes,服务器端,C#,bytes,Pipe,管道,using,客户端
From: https://blog.csdn.net/wangnaisheng/article/details/140541787

相关文章

  • 2023.7.2-3-4Mssql xp_cmdshell提权
    1.概念Mssql和SQLsever的一个产品的不同名称。都属于微软公司旗下。而上述Mssqlxp_cmdshell提权也属于数据库提权的一种。主要依赖于sqlserver自带的存储过程。1.1xp_cmdshell提权扩展存储过程中xp_cmdshell是一个开放接口,可以让sqlsever调用cmd命令。此过程在SQLsever......
  • 最长的Hello, World!(C++)
    最长的Hello,World!(C++)#include<iostream>#include<string>#include<vector>#include<memory>#include<random>_<typenameT>classNode{public:Tdata;std::shared_ptr<Node<T>>next;Node(......
  • Windows下用CMake构建和编译第三方依赖库并向C:\Program Files\或C:\Program Files
    从CMake构建和编译第三方依赖库的步骤:1、下载第三方依赖库的源码,并解压到指定的目录中。2、在第三方依赖库的的源码所在的目录下(一般是src/目录下)创建一个文件夹build。3、打开CMakeGUI软件,按照常规步骤配置和产生针对某种编译器的解决方案文件,比如Visualstudio2019。如下如......
  • Coggle数据科学 | Kaggle干货:自定义transformers数据集
    本文来源公众号“Coggle数据科学”,仅用于学术分享,侵权删,干货满满。原文链接:Kaggle干货:自定义transformers数据集transformers是现在NLP同学必备的库,但在使用的过程中主要的代码是需要自定义数据集,那么如何舒服的读取数据,并使用transformers进行训练模型呢?本文的内容如下:自......
  • Coggle数据科学 | Kaggle 知识点:时序模型 Prophet
    本文来源公众号“Coggle数据科学”,仅用于学术分享,侵权删,干货满满。原文链接:Kaggle知识点:时序模型ProphetProphet 算法在时间序列中Prophet是Facebook开源的时间序列预测算法,可以有效处理节假日信息,并按周、月、年对时间序列数据的变化趋势进行拟合。https://facebook.g......
  • Codeforces Round 962 (Div. 3) CDE
    时间:2024-07-27C.Sort原题:C.Sort标签:前缀和题意给定字符串a,b定义\(sorted(a[l..r])\)表示将a的lr区间排序为有序有q次询问,每次给出区间l,r,要求通过操作使\(sorted(a[l..r])==sorted(b[l..r])\)操作为将\(a_i\)变成需要的任意字符,求最少次数思路一开始由于是div3,尝......
  • 【C++第九章】初阶模板
    C++模板初阶模板介绍......
  • 构造中心损失----pytorch详解
    当输入数据X维度为[num_classes,feat_dim]时,参考链接:Centerloss-pytorch代码详解.对于输入数据X类型为[batch_size,seq_len,feat_dim],对参考链接代码进行调整,整个代码如下:classCenterLoss_seq(nn.Module):"""Centerloss.Reference:Wenetal.ADisc......
  • CentOS配置NTP服务
     更改配置文件[root@Controller~]#vim/etc/chrony.conf重启服务并设置为开机自启动[root@Controller~]#systemctlrestartchronyd.service[root@Controller~]#systemctlenablechronyd.service在另一台CentOS测试更改配置文件[root@Compute~]#vim/etc......
  • Android中Service学习记录
    目录一概述二生命周期2.1启动服务startService()2.2绑定服务bindService()2.3先启动后绑定2.4先绑定后启动三使用3.1本地服务(启动式)3.2可通信的服务(绑定式)3.3前台服务3.4IntentService总结参考一概述Service组件一般用来执行长期在后台的任务,如播放音......