pipes namedpipeserverstream c# named-pipes

c# - Ejemplo en NamedPipeServerStream vs NamedPipeServerClient que tiene PipeDirection.InOut necesario



named pipes communication c# (1)

Estoy buscando una buena muestra donde NamedPipeServerStream y NamedPipeServerClient puedan enviarse mensajes entre ellos (cuando PipeDirection = PipeDirection.InOut para ambos). Por ahora solo encontré este artículo msdn . Pero describe solo el servidor. ¿Alguien sabe cómo debe ser el cliente que se conecta a este servidor?


Lo que sucede es que el servidor se sienta a la espera de una conexión, cuando tiene uno, envía una cadena "En espera" como un simple saludo, el cliente lee esto y lo prueba y luego envía una cadena de "Mensaje de prueba" (en mi aplicación es en realidad la línea de comandos args).

Recuerde que WaitForConnection está bloqueando, por lo que probablemente desee ejecutarlo en un subproceso separado.

class NamedPipeExample { private void client() { var pipeClient = new NamedPipeClientStream(".", "testpipe", PipeDirection.InOut, PipeOptions.None); if (pipeClient.IsConnected != true) { pipeClient.Connect(); } StreamReader sr = new StreamReader(pipeClient); StreamWriter sw = new StreamWriter(pipeClient); string temp; temp = sr.ReadLine(); if (temp == "Waiting") { try { sw.WriteLine("Test Message"); sw.Flush(); pipeClient.Close(); } catch (Exception ex) { throw ex; } } }

Misma clase, método de servidor

private void server() { var pipeServer = new NamedPipeServerStream("testpipe", PipeDirection.InOut, 4); StreamReader sr = new StreamReader(pipeServer); StreamWriter sw = new StreamWriter(pipeServer); do { try { pipeServer.WaitForConnection(); string test; sw.WriteLine("Waiting"); sw.Flush(); pipeServer.WaitForPipeDrain(); test = sr.ReadLine(); Console.WriteLine(test); } catch (Exception ex) { throw ex; } finally { pipeServer.WaitForPipeDrain(); if (pipeServer.IsConnected) { pipeServer.Disconnect(); } } } while (true); } }