C# 两个进程/exe通讯方式 两个应用程序通讯方式

C# 两个exe通讯方式 两个应用程序通讯方式

1. 命名管道(Named Pipes)

1.1. 概述

命名管道是一种用于在同一台机器或网络中不同进程之间进行双向通信的机制。它支持同步和异步通信,适用于需要高效数据传输的场景。

1.2. 特点

双向通信:支持双向数据传输。
安全性:可以设置访问权限,确保通信的安全性。
跨网络:支持跨网络通信。

1.3. 实现方式

1.3.1. 服务器端(NamedPipeServerStream)
using System;
using System.IO.Pipes;
using System.Text;
using System.Threading.Tasks;

class PipeServer
{
   
    public static async Task StartServer()
    {
   
        using (var pipeServer = new NamedPipeServerStream("TestPipe", PipeDirection.InOut, 1, PipeTransmissionMode.Byte, PipeOptions.Asynchronous))
        {
   
            Console.WriteLine("等待客户端连接...");
            await pipeServer.WaitForConnectionAsync();
            Console.WriteLine("客户端已连接。");

            // 接收数据
            byte[] buffer = new byte[256];
            int bytesRead = await pipeServer.ReadAsync(buffer, 0, buffer.Length);
            string receivedMessage = Encoding.UTF8.GetString(buffer, 0, bytesRead);
            Console.WriteLine($"收到消息:{
     receivedMessage}");

            // 发送回应
            string response = "Hello from server!";
            byte[] responseBytes = Encoding.UTF8.GetBytes(response);
            await pipeServer.WriteAsync(responseBytes, 0, responseBytes.Length);
            Console.WriteLine("已发送回应。");
        }
    }

    static void Main(string[] args)
    {
   
        Task.Run(() => StartServer()).Wait();
    }
}
1.3.2. 客户端(NamedPipeClientStream)
using System;
using System.IO.Pipes;
using System.Text;
using System.Threading.Tasks;

class PipeClient
{
   
    public static async Task StartClient()
    {
   
        using (var pipeClient = new NamedPipeClientStream(".", "TestPipe", PipeDirection.InOut, PipeOptions.Asynchronous))
        {
   
            Console.WriteLine("尝试连接到服务器...");
            await pipeClient.ConnectAsync();
            Console.WriteLine("已连接到服务器。");

            // 发送数据
            string message = "Hello from client!";
            byte[] messageBytes = Encoding.UTF8.GetBytes(message);
            await pipeClient.WriteAsync(messageBytes, 0, messageBytes.Length);
            Console.WriteLine("已发送消息。");

            // 接收回应
            byte[] buffer = new byte[256];
            int bytesRead = await pipeClient.ReadAsync(buffer, 0, buffer.Length);
            string response = Encoding.UTF8.GetString(buffer, 0, bytesRead);
            Console.WriteLine($"收到回应:{
     response}");
        }
    }

    static void Main(string[] args)
    {
   
        Task.Run(() => StartClient()).Wait();
    }
}

1.4. 使用场景

需要高效、双向通信的应用程序。
同一台机器或网络中的进程间通信。
需要传输大量数据或复杂数据结构。

2. 套接字(Sockets)

2.1. 概述

套接字是一种底层的通信机制,支持跨网络的进程间通信。它适用于需要跨不同机器或网络通信的应用程序。

2.2. 特点

灵活性高:支持多种协议(TCP、UDP)。
跨平台:可用于不同操作系统间的通信。
高性能:适用于实时数据传输和高并发应用。

2.3. 实现方式

2.3.1. 服务器端(TCP)
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;

class SocketServer
{
   
    public static async Task StartServer()
    {
   
        TcpListener listener = new TcpListener(IPAddress.Any, 5000);
        listener.Start();
        Console.WriteLine("服务器已启动,等待连接...");

        using (TcpClient client = await listener.AcceptTcpClientAsync())
        {
   
            Console.WriteLine("客户端已连接。");
            NetworkStream stream = client.GetStream();

            // 接收数据
            byte[] buffer = new byte[1024];
            int bytesRead = await stream.ReadAsync(buffer, 0, buffer.Length);
            string receivedMessage = Encoding.UTF8.GetString(buffer, 0, bytesRead);
            Console.WriteLine($"收到消息:{
     receivedMessage}");

            // 发送回应
            string response = "Hello from server!";
            byte[] responseBytes = Encoding.UTF8.GetBytes(response);
            await stream.WriteAsync(responseBytes, 0, responseBytes.Length);
            Console.WriteLine("已发送回应。");
        }

        listener.Stop();
    }

    static void Main(string[] args)
    {
   
        Task.Run(() => StartServer()).Wait();
    }
}
2.3.2. 客户端(TCP)
using System;
using System.Net.Sockets;
using System.Text;
using System.Threading.Task
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

笑非不退

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值