CreateNamedPipe - Creating Named Pipe Server

   Named Pipes are useful in Inter Process communication. Pipes will always have two ends. One on the Server (usually to listen and reply) and the client which connects and sends messages. So Pipes can be used in communicating among two programs very conveniently.

   Named Pipe server can be created using CreateNamedPipe function. This function creates the pipe and returns a handle for the Pipe created. Then ConnectNamedPipe should be used to listen for any incoming connections from the client. Typically this waits in a infinite loops to keep receiving messages.

   The following sample uses both CreateNamedPipe and ConnectNamedPipe to receive and print the messages. See the corresponding Named Pipe client.

CreateNamedPipe - Sample:

     #include <windows.h>
     #include <stdio.h>
     #define BUFSIZE 1024
     #define PIPE_TIMEOUT 5000

     int main()
     {

          BOOL fConnected;
          LPTSTR lpszPipename = "\\\\.\\pipe\\SamplePipe";
          CHAR chRequest[BUFSIZE];
          DWORD cbBytesRead;
          BOOL fSuccess;
          HANDLE hPipe;


          hPipe = CreateNamedPipe ( lpszPipename,
                                                  PIPE_ACCESS_DUPLEX, // read/write access
                                                  PIPE_TYPE_MESSAGE | // message type pipe
                                                  PIPE_READMODE_MESSAGE | // message-read mode
                                                  PIPE_WAIT, // blocking mode
                                                  PIPE_UNLIMITED_INSTANCES, // max. instances
                                                  BUFSIZE, // output buffer size
                                                  BUFSIZE, // input buffer size
                                                  PIPE_TIMEOUT, // client time-out
                                                  NULL); // no security attribute

          if (hPipe == INVALID_HANDLE_VALUE)
              return true;

          for (;;)
          {
               // Trying connectnamedpipe in sample for CreateNamedPipe
               // Wait for the client to connect; if it succeeds,
              // the function returns a nonzero value. If the function returns
              // zero, GetLastError returns ERROR_PIPE_CONNECTED.

              fConnected = ConnectNamedPipe(hPipe, NULL) ?
                   TRUE : (GetLastError() == ERROR_PIPE_CONNECTED);

              if (fConnected)
              {
                  fSuccess = ReadFile (hPipe, // handle to pipe
                                                  chRequest, // buffer to receive data
                                                  BUFSIZE, // size of buffer
                                                  &cbBytesRead, // number of bytes read
                                                  NULL); // not overlapped I/O

                  chRequest[cbBytesRead] = '\0';
                  printf("Data Received: %s\n",chRequest);

                   if (! fSuccess || cbBytesRead == 0)
                      break;

                   FlushFileBuffers(hPipe);
                   DisconnectNamedPipe(hPipe);
              }
              else
                 // The client could not connect in the CreateNamedPipe sample, so close the pipe.
                 CloseHandle(hPipe);
         }
         CloseHandle(hPipe);
         return 1;
  
    }

//End of sample using CreateNamedPipe


   The above program waits infinitely for Client Pipes to connect from \\.\pipe\SamplePipe. When a client is connected and data is received, it is printed on to the console.

Close    To Top
  • Prev Article-Programming:
  • Next Article-Programming:
  • Now: Tutorial for Web and Software Design > Programming > win32 > Programming Content
    Photoshop Tutorial
     

    Special Effect

      3D Effect
      Photoshop Articles
    Programming Tutorial
     

    C/C++ Tutorial

      Visual Basic
      C# Tutorial
    Database Tutorial
     

    MySQL Tutorial

      MS SQL Tutorial
      Oracle Tutorial
    Geek Tutorial
     

    Blogging Tutorial

      RSS Tutorial
      Podcasting Tutorial
    Graphic Design Tutorial
      Coreldraw Tutorial
      Illustrator Tutorial
      3D Tutorials
    Webmaster Articles
     

    Domain Service

      Web Hosting
      Site Promotion
    Java Tutorial/ Articles
     

    Java Servlets

      JavaEE Tutorial
     

    JavaBeans Tutorial

    XML Tutorial/ Articles
     

    XML Style

      AJAX Tutorial
      XML Mobile
    Flash Tutorial/ Articles
     

    Flash Video

      Action Script
      Flash Articles
    OS Tutorial/ Articles
      Linux Tutorial
      Symbian Tutorial
      MacOS Tutorial
    Personal Tech
      Hardware Tutorial
      Software Tutorial
      Online Auction