.NET Zone is brought to you in partnership with:

I am developer and technology maniac who is working on Microsoft and PHP technologies. I have ASP.NET MVP title and I hold MCAD, MCSD and MCTS certificates. When I have free time I usually play with new technologies, hack something, read books, participate in communities and speak in events. I am also active blogger and my ASP.NET blog is the place you can find some interesting reading about my discoveries and personal thoughts. Gunnar is a DZone MVB and is not an employee of DZone and has posted 140 posts at DZone. You can read more from them at their website. View Full User Profile

Writing a simple named pipes server in C#

03.10.2012
| 10944 views |
  • submit to reddit

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 Gunnar Peipman, author and DZone MVB. (source)

(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

Comment viewing options

Select your preferred way to display the comments and click "Save settings" to activate your changes.