尝试打开管道

时间:2015-10-16 22:51:57

标签: c++ windows ipc named-pipes

我正在尝试使用两台Windows 7计算机上的命名管道创建演示客户端/服务器应用程序,但无法使其正常工作。这两台机器,我们称之为服务器和笔记本电脑,都连接到以太网交换机,而以太网交换机又连接到电缆调制解调器。两台机器都可以看到互联网,两台机器都显示在Windows网络地图中。所以我认为他们正确联网。

我正在用Visual C ++编写,基本上是在MSDN上复制命名管道服务器和客户端的示例代码。在我的服务器上,我使用管道名称调用CreateNamedPipe():

\\.\pipe\MyServerName

在客户端上,我使用管道名称:

调用CreateFile
\\<machine>\pipe\MyServerName

其中“机器”是可配置的。如果我在同一台机器上运行服务器和客户端,并且机器使用“。”或者“POWEREDGE”(根据Windows的服务器机器的名称),两个程序通信正常。

现在我去我的笔记本电脑并运行客户端软件。我使用“POWEREDGE”作为机器名称。 GetFast失败,GetLastError = 1(显然“功能不正确”)。

关于这里可能出现什么问题的任何想法?

响应请求,这是实际代码:

 // CLIENT SIDE
 // note: value of gLKServer is "POWEREDGE"
 char PipeName[256]="";
 wsprintf(PipeName,"\\\\%s\\pipe\\LKServer", gLKServerName);

 while (TRUE) {
   hPipe = CreateFile( 
   PipeName,   // pipe name 
   GENERIC_READ |  // read and write access 
   GENERIC_WRITE, 
   0,              // no sharing 
   NULL,           // default security attributes
   OPEN_EXISTING,  // opens existing pipe 
   0,              // default attributes 
   NULL);          // no template file 

   if (hPipe != INVALID_HANDLE_VALUE) {
     break; 
   }

   // Exit if an error other than ERROR_PIPE_BUSY occurs. 

   if (err=GetLastError() != ERROR_PIPE_BUSY) 
    {
      printf("CreateFile error %lu\n", err); 
    }
    ...

 // SERVER SIDE
 char PipeName[256]="\\\\.\\pipe\\LKServer"; 
  hPipe = CreateNamedPipe( 
      PipeName,             // pipe name 
      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 
      0,                        // client time-out 
      NULL);                    // default security attribute 

0 个答案:

没有答案