C# 进程间通信框架源码和演示
时间: 2023-10-12 17:15:47 浏览: 142
C# 进程间通信框架有多种实现方式,其中比较常用的有以下几种:
1. 命名管道(Named Pipes):这是一种基于命名管道的进程间通信方式,可以实现同一台机器上不同进程之间的通信。使用命名管道时,需要指定管道的名称,并在不同的进程中分别创建管道的客户端和服务端。C# 中可以使用 System.IO.Pipes 命名空间下的 NamedPipeServerStream 和 NamedPipeClientStream 类来实现命名管道通信。
2. 进程信号量(Process Synchronization):这是一种基于进程信号量的进程间通信方式,可以实现同一台机器上不同进程之间的同步和互斥。使用进程信号量时,需要指定信号量的名称,并在不同的进程中分别创建信号量的持有者和等待者。C# 中可以使用 System.Threading 命名空间下的 Semaphore 类来实现进程信号量通信。
3. 进程共享内存(Shared Memory):这是一种基于共享内存的进程间通信方式,可以实现同一台机器上不同进程之间的数据共享。使用进程共享内存时,需要在一个进程中创建共享内存区域,并在其他进程中打开该内存区域。C# 中可以使用 System.IO.MemoryMappedFiles 命名空间下的 MemoryMappedFile 类来实现进程共享内存通信。
以下是一个使用命名管道实现进程间通信的示例代码:
服务端:
```csharp
using System;
using System.IO;
using System.IO.Pipes;
using System.Text;
class Program
{
static void Main(string[] args)
{
var server = new NamedPipeServerStream("testpipe");
Console.WriteLine("Waiting for connection...");
server.WaitForConnection();
Console.WriteLine("Connected.");
var reader = new StreamReader(server);
var writer = new StreamWriter(server);
while (true)
{
var message = reader.ReadLine();
Console.WriteLine("Received: " + message);
writer.WriteLine("Echo: " + message);
writer.Flush();
}
}
}
```
客户端:
```csharp
using System;
using System.IO;
using System.IO.Pipes;
using System.Text;
class Program
{
static void Main(string[] args)
{
var client = new NamedPipeClientStream(".", "testpipe", PipeDirection.InOut);
client.Connect();
Console.WriteLine("Connected.");
var reader = new StreamReader(client);
var writer = new StreamWriter(client);
while (true)
{
Console.Write("> ");
var message = Console.ReadLine();
writer.WriteLine(message);
writer.Flush();
var response = reader.ReadLine();
Console.WriteLine(response);
}
}
}
```
这个示例代码实现了一个简单的命名管道通信,服务端监听名为“testpipe”的管道,客户端连接到该管道并发送消息,服务端接收到消息后返回回应。需要注意的是,这个示例代码只能在同一台机器上运行,如果要在不同的机器上运行,则需要修改服务端的管道名称,以便客户端可以连接到正确的管道。
阅读全文