Writing a simple named pipes server in C#
I solved a little problem last night when playing with named pipes. I created a named pipe that writes all output to a file. Named pipes are opened for all users on a single machine. In this post I will show you a simple class that works as a pipe server.
In .NET-based languages we can use the System.IO.Pipes namespace classes to work with named pipes. Here is my simple pipe server that writes all client output to file.
public class MyPipeServer
{
public void Run()
{
var sid = new SecurityIdentifier(WellKnownSidType.WorldSid, null);
var rule = new PipeAccessRule(sid, PipeAccessRights.ReadWrite,
AccessControlType.Allow);
var sec = new PipeSecurity();
sec.AddAccessRule(rule);
using (NamedPipeServerStream pipeServer = new NamedPipeServerStream
("testpipe",PipeDirection.InOut, 100,
PipeTransmissionMode.Byte, PipeOptions.None, 0, 0, sec))
{
pipeServer.WaitForConnection();
var read = 0;
var bytes = new byte[4096];
using(var file=File.Open(@"c:\tmp\myfile.dat", FileMode.Create))
while ((read = pipeServer.Read(bytes, 0, bytes.Length)) > 0)
{
file.Write(bytes, 0, read);
file.Flush();
}
}
}}
Real-life pipe scenarios are usually more complex but this simple class is good to get things running like they should be.
(Note: Opinions expressed in this article and its replies are the opinions of their respective authors and not those of DZone, Inc.)





Comments
Reehana Davis replied on Mon, 2012/03/12 - 7:56am
Good effort and nice article and to the point, You can also have a look at following two article regarding the same. I went through them when i was googling last night with my friend regarding simple tutorial for named piped server.
1) http://www.switchonthecode.com/tutorials/interprocess-communication-using-named-pipes-in-csharp
2) http://www.dijksterhuis.org/using-named-pipes-in-c-windows/
3) http://www.codeproject.com/Articles/7176/Inter-Process-Communication-in-NET-Using-Named-Pip