我有一个我想要实现的简单设计。
基于C ++的单个服务器应用程序创建一个只写命名管道。多个客户端(C ++或C#)以只读方式连接并侦听状态消息。
我将此工作用于本地进程,但我无法将其他主机上的客户端连接到服务器。
服务器在XP SP2上运行(可能是SP3)。客户端在Win7上运行。
SECURITY_DESCRIPTOR sd;
SECURITY_ATTRIBUTES sa;
SID_IDENTIFIER_AUTHORITY siaWorldSidAuthority = SECURITY_WORLD_SID_AUTHORITY;
PSID psidWorldSid = (PSID) LocalAlloc (LPTR, GetSidLengthRequired(1));
InitializeSid(psidWorldSid, &siaWorldSidAuthority, 1);
*(GetSidSubAuthority(psidWorldSid, 0)) = SECURITY_WORLD_RID;
InitializeSecurityDescriptor(&sd, SECURITY_DESCRIPTOR_REVISION);
SetSecurityDescriptorGroup(&sd, psidWorldSid, TRUE);
ZeroMemory(&sa, sizeof(SECURITY_ATTRIBUTES));
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.lpSecurityDescriptor = &sd;
sa.bInheritHandle = FALSE;
HANDLE hPipe = CreateNamedPipe(
lpszPipename, // name
PIPE_ACCESS_OUTBOUND, // 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 /*&sa*/); // no security attribute
在最终参数中用& sa替换NULL无效。 C#客户端代码如下所示。
SafeFileHandle pipeHandle =
CreateFile(
pipeName,
GENERIC_READ,
0,
IntPtr.Zero,
OPEN_EXISTING,
0,
IntPtr.Zero);
我在这里错过了什么愚蠢的事情?
答案 0 :(得分:0)
你检查过防火墙了吗?端口445是否被阻止?