管道是一种进程间通信的机制,它可以用于在两个进程之间传递数据。在C#中,使用System.IO.Pipes
命名空间提供的NamedPipeServerStream
和NamedPipeClientStream
类可以很容易地实现管道通信。
服务器端
首先,在服务器端,我们需要创建一个NamedPipeServerStream
对象,并指定管道的名称和方向(读、写或双向)。下面是一个创建双向管道的例子:
NamedPipeServerStream server = new NamedPipeServerStream("my_pipe", PipeDirection.InOut);
接下来,我们需要使用WaitForConnection
方法等待客户端连接。一旦连接建立,我们就可以使用StreamReader
和StreamWriter
对象来读取和写入数据。
server.WaitForConnection();
StreamReader reader = new StreamReader(server);
StreamWriter writer = new StreamWriter(server);
现在,我们可以使用reader
对象读取来自客户端的数据,使用writer
对象向客户端发送数据。
string data = reader.ReadLine();
writer.WriteLine("Hello, " + data);
当完成通信后,我们需要调用Close
方法关闭管道。
server.Close();
客户端
在客户端,我们需要创建一个NamedPipeClientStream
对象,并指定要连接的服务器的名称和管道的名称和方向。下面是一个连接到上述服务器的例子:
NamedPipeClientStream client = new NamedPipeClientStream(".", "my_pipe", PipeDirection.InOut);
client.Connect();
StreamReader reader = new StreamReader(client);
StreamWriter writer = new StreamWriter(client);
现在,我们可以使用writer
对象向服务器发送数据,使用reader
对象读取来自服务器的数据。
writer.WriteLine("World");
string response = reader.ReadLine();
当完成通信后,我们需要调用Close
方法关闭管道。
client.Close();
这就是使用C#管道在进程间进行双向通信的基本方法。可以通过使用不同的管道名称和方向来实现更复杂的通信方案。