Gunnar Peipman's ASP.NET blog

ASP.NET, C#, SharePoint, SQL Server and general software development topics.

Sponsors

News

 
 
 
DZone MVB

Links

Social

Writing simple named pipes server in C#

I solved a little problem last night when playing with named pipes. I created named pipe that writes all output to file. Named pipe is opened for all users in machine. In this posting I will show you simple class that works as pipe server.

In .NET Framework languages we can use 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.

Posted: Feb 24 2012, 12:04 PM by DigiMortal | with 1 comment(s)
Filed under: ,

Comments

Ricardo Peres said:

Why not use WCF with NetNamedPipeBinding?

# February 24, 2012 6:14 AM