Windows7上使用【命名管道】【局域网】通信有关问题

Windows7下使用【命名管道】【局域网】通信问题
首先看一下实现代码:
1、服务器端创建管道

CString pipeName(_T("\\\\.\\pipe\\MyPipe")); //CString pipeName(_T("\\\\.\\pipe\\MyPipe")); //其中圆点 ”.” 表示的是本地机器,如果想要与远程的服务器建立连接,那么这个圆点位置处应指定这个远程服务器的名称
//设置安全权限,解决局域网管道无法通信问题
SECURITY_ATTRIBUTES     sa;
SECURITY_DESCRIPTOR     sd;

if( InitializeSecurityDescriptor(&sd, SECURITY_DESCRIPTOR_REVISION) )
{
// add a NULL disc. ACL to the
// security descriptor.
if (SetSecurityDescriptorDacl(&sd, TRUE, (PACL) NULL, FALSE))
{
sa.nLength = sizeof(sa);
sa.lpSecurityDescriptor =&sd;
sa.bInheritHandle = TRUE;

//在这里创建管道
m_hPile = CreateNamedPipeW(pipeName,
PIPE_ACCESS_DUPLEX|FILE_FLAG_OVERLAPPED,
0,1,1024,1024,0,&sa);
}
}
//设置权限结束


if (m_hPile == INVALID_HANDLE_VALUE)
{
MessageBox(_T("创建命名管道失败!"));
m_hPile = NULL;
return;
}
else
{
HANDLE hEvent;
hEvent = CreateEventW(NULL,TRUE,FALSE,NULL);
if (!hEvent)
{
MessageBox(_T("创建事件对象失败!"));
CloseHandle(m_hPile);
m_hPile = NULL;
return;
}
OVERLAPPED ovlap;
    ZeroMemory(&ovlap,sizeof(OVERLAPPED));
ovlap.hEvent = hEvent;
if (!ConnectNamedPipe(m_hPile,&ovlap))
{
if (ERROR_IO_PENDING != GetLastError())
{
MessageBox(_T("等待客户端连接失败!"));
CloseHandle(hEvent);
CloseHandle(m_hPile);
m_hPile = NULL;
return;
}

}
if (WAIT_FAILED ==  WaitForSingleObject(hEvent,INFINITE))
{
MessageBox(_T("等待对象失败!"));
CloseHandle(hEvent);
CloseHandle(m_hPile);
m_hPile = NULL;
return;
}
CloseHandle(hEvent);
}


2、客户端连接

CString pipeName(_T("\\\\ThinkPad\\pipe\\MyPipe"));//CString pipeName(_T("\\\\.\\pipe\\MyPipe"));
if (!WaitNamedPipeW(pipeName,NMPWAIT_WAIT_FOREVER))
{
MessageBox(_T("没有可以利用的命名管道实例!"));
return;
}
m_hPipe = CreateFile(pipeName,GENERIC_READ|GENERIC_WRITE,
0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if (INVALID_HANDLE_VALUE == m_hPipe)
{
MessageBox(_T("打开命名管道!"));
m_hPipe = NULL;
return;
}



ThinkPad是服务器名,在另一台机器上可以ping通。确定防火墙都关闭。
问题:
服务器和客户端都在本地的时候,可以正常通信。
当把客户端拷贝到另一台机器的时候,就无法连接管道了。
请问是什么原因?

找到一个老帖子,说是权限问题:http://topic.csdn.net/u/20090806/21/7ef551d2-69d9-446d-b8b8-963e530d54ff.html
但是,我在上述代码中加入相关代码,依然不行。
请各位指教
------解决方案--------------------
也许是管道技术过于落后,很少有人这样用。双机通讯大家都用socket,管道并不能显出任何优势。

我印象中管道似乎是依附在神马 IPX/SPX/netBIOS 协议之上的,由于过于落后,XP缺省已不装这个协议了。也许你把两台电脑上的这个协议装上,你的问题就解决了 <--- 注意,是也许哈,我凭理推断,不保证问题就出在这里
------解决方案--------------------
你这里有很多Messagebox嘛,在这些地方使用GetLastError()获取下错误号,看看是什么原因
------解决方案--------------------
机器之间通信还是用Socket吧. 管道一般在同一个机器.现在很多网络安全属性等,估计有影响.
------解决方案--------------------
我也是在一台机器上可以。2台机器上不行。
管道现在用的不多,就放弃了~~~~
------解决方案--------------------