客户端:
这是本机的两个进程进行通信,发送数据和就收数据最好是新开一个线程,因为当客户端或者发送端手法数据的时候会导致线程的阻塞。
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;
}