Named Pipes zur Interprozesskommunikation

Interprozesskommunikation unter .NET ist so eine Sache. Da gibt es unter anderem das relativ mächtige Remoting Framework. Leider schlägt sich die Mächtigkeit auch in der Komplexität nieder. Wesentlich einfach wird das ganze mittels Named Pipes welche sich auch zur Interprozesskommunikation eignen. Dazu benötigt man einen Server und einen Client. Der Server könnte dabei unter .NET so aussehen:

Task.Factory.StartNew(() =>
{
	NamedPipeServerStream server=new NamedPipeServerStream("halfPipe");
	server.WaitForConnection();
	StreamReader reader=new StreamReader(server);
	StreamWriter writer=new StreamWriter(server);

	while(true)
	{
		string line=reader.ReadLine();
		
		if(line=="HELLO")
		{
			writer.WriteLine("Hi");
			writer.Flush();
		}
		else
		{
			writer.WriteLine("Unknown command.");
			writer.Flush();
		}
	}
});

Auf der Clientseite sieht die Kommunikation fast genauso aus:

NamedPipeClientStream pipeStream=new NamedPipeClientStream("halfPipe");
pipeStream.Connect();
StreamReader reader=new StreamReader(pipeStream);
StreamWriterwriter=new StreamWriter(pipeStream);

writer.WriteLine("HELLO");
writer.Flush();

string ret=reader.ReadLine();

Damit ist die Kommunikation zwischen den Prozessen eingerichtet. Natürlich kann man nicht nur Strings sondern auch andere Datentypen über die „Named Pipes“ verschicken.