客户端:
这是本机的两个进程进行通信,发送数据和就收数据最好是新开一个线程,因为当客户端或者发送端手法数据的时候会导致线程的阻塞。
class Program
{
static void Main(string[] args)
{
Thread pipeThread = new Thread(SendData);
pipeThread.IsBackground = true;
pipeThread.Start();
pipeThread.Join();
}
private static void SendData()
{
while(true)
{
try
{
_pipeClient = null;
_pipeClient = new NamedPipeClientStream(".", "closePipe", PipeDirection.InOut, PipeOptions.None, TokenImpersonationLevel.Impersonation);
_pipeClient.Connect();
StreamWriter sw = new StreamWriter(_pipeClient);
Console.WriteLine("Please input messages sent 0.");
string msg = Console.ReadLine();
sw.WriteLine(msg);
sw.Flush();
Thread.Sleep(1000);
sw.Close();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
private static NamedPipeClientStream _pipeClient;
}
服务端
class Program
{
static void Main(string[] args)
{
Thread receiveDataThread = new Thread(ReceiveDataFromClient);
receiveDataThread.IsBackground = true;
receiveDataThread.Start();
receiveDataThread.Join();
}
private static void ReceiveDataFromClient()
{
while (true)
{
try
{
_pipeServer = new NamedPipeServerStream("closePipe", PipeDirection.InOut, 2);
_pipeServer.WaitForConnection(); //Waiting
StreamReader sr = new StreamReader(_pipeServer);
string recData = sr.ReadLine();
if (recData == "Exit")
{
Console.WriteLine("Pipe Exit.");
Process.GetCurrentProcess().Kill();
}
else
{
Console.WriteLine(recData);
}
Thread.Sleep(1000);
sr.Close();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
}
private static NamedPipeServerStream _pipeServer;
}
本文介绍了一个使用.NET框架中NamedPipe进行进程间通信的例子。客户端和服务端通过命名管道进行双向数据交换,实现消息的发送与接收。该示例展示了如何创建客户端与服务端线程,并在两者之间发送和接收字符串消息。
649

被折叠的 条评论
为什么被折叠?



