Over a million developers have joined DZone.

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, 
        var sec = new PipeSecurity();
        using (NamedPipeServerStream pipeServer = new NamedPipeServerStream 
              ("testpipe",PipeDirection.InOut, 100, 
               PipeTransmissionMode.Byte, PipeOptions.None, 0, 0, sec))
            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);

Real-life pipe scenarios are usually more complex but this simple class is good to get things running like they should be.


Published at DZone with permission of Gunnar Peipman , DZone MVB .

Opinions expressed by DZone contributors are their own.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}