我正在尝试使用两台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