Friday, March 11, 2011

Interprocess Communication using Named Pipes in C#

Named pipes are a great way to communicate between multiple processes. What's makes them even better is that the processes don't have to share the same language.

A named pipe is a named, one-way or duplex pipe for communication between the pipe server and one or more pipe clients.

Any process can act as both a server and a client, making peer-to-peer communication possible. As used here, the term pipe server refers to a process that creates a named pipe, and the term pipe client refers to a process that connects to an instance of a named pipe. The server-side function for instantiating a named pipe is CreateNamedPipe. The server-side function for accepting a connection is ConnectNamedPipe. A client process connects to a named pipe by using the CreateFile or CallNamedPipe function.


Server Side:
using (NamedPipeServerStream pipeServer = new NamedPipeServerStream("testpipe", PipeDirection.Out))
{
     pipeServer.WaitForConnection();
     try
     {
          using (StreamWriter sw = new StreamWriter(pipeServer))
          {
           sw.AutoFlush = true;
           sw.WriteLine("Mensaje");
           }
     }
     catch (IOException ex)
     {
          MessageBox.Show("ERROR: {0}", ex.Message);
     }
}

Client Side:  
using (NamedPipeClientStream pipeClient = new NamedPipeClientStream(".", "testpipe", PipeDirection.In))
{
     try
      {
           pipeClient.Connect(2000);
           using (StreamReader sr = new StreamReader(pipeClient))
           {
                string temp = string.Empty;
                while ((temp = sr.ReadLine()) != null)
           {
           label4.Text = "Received from server: ";
           textBox1.Text = temp;
     }
     catch (Exception ex) { }

No comments:

Post a Comment