在C#中,ProcessStartInfo
类主要用于启动和管理外部进程
System.IO.Pipes
命名空间中的NamedPipeServerStream
和NamedPipeClientStream
类来创建和管理命名管道。示例:创建一个简单的命名管道服务器和客户端
Server(服务器端):
using System;
using System.IO.Pipes;
class NamedPipeServer
{
static void Main()
{
string pipeName = "TestPipe";
using (NamedPipeServerStream serverStream = new NamedPipeServerStream(pipeName, PipeDirection.InOut))
{
Console.WriteLine("Waiting for client connection...");
serverStream.WaitForConnection();
// 发送数据到客户端
string message = "Hello from server!";
byte[] buffer = System.Text.Encoding.UTF8.GetBytes(message);
serverStream.Write(buffer, 0, buffer.Length);
serverStream.Close();
}
}
}
Client(客户端):
using System;
using System.IO.Pipes;
class NamedPipeClient
{
static void Main()
{
string pipeName = "TestPipe";
using (NamedPipeClientStream clientStream = new NamedPipeClientStream(".", pipeName, PipeDirection.InOut))
{
Console.WriteLine("Connecting to server...");
clientStream.Connect();
// 从服务器接收数据
byte[] buffer = new byte[256];
int bytesRead = clientStream.Read(buffer, 0, buffer.Length);
string message = System.Text.Encoding.UTF8.GetString(buffer, 0, bytesRead);
Console.WriteLine("Received from server: " + message);
clientStream.Close();
}
}
}
System.IO.MemoryMappedFiles
命名空间中的MemoryMappedFile
和MemoryMappedViewAccessor
类来创建和管理共享内存。示例:创建一个简单的共享内存服务器和客户端
Server(服务器端):
using System;
using System.IO.MemoryMappedFiles;
class SharedMemoryServer
{
static void Main()
{
string sharedMemoryName = "TestSharedMemory";
using (MemoryMappedFile sharedMemory = MemoryMappedFile.CreateOrOpen(sharedMemoryName, 1024))
{
using (MemoryMappedViewAccessor accessor = sharedMemory.CreateViewAccessor())
{
Console.WriteLine("Writing to shared memory...");
string message = "Hello from server!";
byte[] buffer = System.Text.Encoding.UTF8.GetBytes(message);
accessor.Write(0, buffer, 0, buffer.Length);
}
}
}
}
Client(客户端):
using System;
using System.IO.MemoryMappedFiles;
class SharedMemoryClient
{
static void Main()
{
string sharedMemoryName = "TestSharedMemory";
using (MemoryMappedFile sharedMemory = MemoryMappedFile.OpenExisting(sharedMemoryName))
{
using (MemoryMappedViewAccessor accessor = sharedMemory.CreateViewAccessor())
{
Console.WriteLine("Reading from shared memory...");
byte[] buffer = new byte[1024];
int bytesRead = accessor.Read(0, buffer, 0, buffer.Length);
string message = System.Text.Encoding.UTF8.GetString(buffer, 0, bytesRead);
Console.WriteLine("Received from server: " + message);
}
}
}
}
System.Net.Sockets
命名空间中的TcpClient
和TcpListener
类来创建和管理套接字。示例:创建一个简单的TCP服务器和客户端
Server(服务器端):
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
class TcpServer
{
static async Task Main(string[] args)
{
int port = 8080;
using (TcpListener listener = new TcpListener(IPAddress.Any, port))
{
listener.Start();
Console.WriteLine("Waiting for client connection...");
using (TcpClient client = await listener.AcceptTcpClientAsync())
{
NetworkStream stream = client.GetStream();
byte[] buffer = new byte[1024];
int bytesRead = await stream.ReadAsync(buffer, 0, buffer.Length);
string message = Encoding.UTF8.GetString(buffer, 0, bytesRead);
Console.WriteLine("Received from client: " + message);
string response = "Hello from server!";
byte[] responseBytes = Encoding.UTF8.GetBytes(response);
await stream.WriteAsync(responseBytes, 0, responseBytes.Length);
}
}
}
}
Client(客户端):
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
class TcpClient
{
static async Task Main(string[] args)
{
string serverIp = "127.0.0.1";
int port = 8080;
using (TcpClient client = new TcpClient(serverIp, port))
{
NetworkStream stream = client.GetStream();
string message = "Hello from client!";
byte[] messageBytes = Encoding.UTF8.GetBytes(message);
await stream.WriteAsync(messageBytes, 0, messageBytes.Length);
byte[] buffer = new byte[1024];
int bytesRead = await stream.ReadAsync(buffer, 0, buffer.Length);
string response = Encoding.UTF8.GetString(buffer, 0, bytesRead);
Console.WriteLine("Received from server: " + response);
}
}
}
这些示例展示了如何在C#中使用ProcessStartInfo
类以及上述方法来管理进程间通信。你可以根据具体需求选择合适的IPC方法。