Platinum Partner
server,dotnet,how-to,microsoft,tools,c#,net

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.

Published at DZone with permission of {{ articles[0].authors[0].realName }}, DZone MVB. (source)

Opinions expressed by DZone contributors are their own.

{{ tag }}, {{tag}},

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

{{ parent.tldr }}

{{ parent.urlSource.name }}
{{ parent.authors[0].realName || parent.author}}

{{ parent.authors[0].tagline || parent.tagline }}

{{ parent.views }} ViewsClicks
Tweet

{{parent.nComments}}