我使用命名管道在一个程序内部进行内部通信(在 Windows XP 上)。当我连接 2-3 个客户端时,命名管道适用于多个连接。但是,当我同时应用多个连接(例如 10 个)时,它似乎被卡住了,ConnectNamedPipe() 只能接受几个连接,并且通信似乎被卡住了。
但是当我在客户端代码中调试时,我发现所有客户端 CreateFile 函数都正确返回了文件句柄(似乎是正确的)。这很令人困惑,因为我观看了 CreateNamedPipe 循环,它只创建了大约一半的句柄......
服务器部分:
while (!isPipeServerClosed)
{
try
{
filehandle = CreateNamedPipe(
this.pipeName,
DUPLEX | FILE_FLAG_OVERLAPPED,
PIPE_TYPE_MESSAGE | PIPE_READMODE_MESSAGE,
255,
InBufferSize,
InBufferSize,
0,
IntPtr.Zero);
if (ConnectNamedPipe(filehandle, IntPtr.Zero) > 0)
{
PipeThread pipe = new PipeThread(filehandle);
sPipeThreadList.Add(pipe);
}
}
catch (Exception exp)
{
System.Console.WriteLine(exp.StackTrace);
}
}
客户端部分,简单的 Delphi 代码(即使我尝试使用 WaitNamedPipe 也表现相同):
FHandle := INVALID_HANDLE_VALUE;
FHandle := CreateFile(PChar(FPipeName),GENERIC_READ or GENERIC_WRITE,
0,0,OPEN_EXISTING,FILE_FLAG_OVERLAPPED,0);
// create the class
if FHandle = INVALID_HANDLE_VALUE then
begin
Connected := false;
end
我能知道我错过了什么吗?谢谢!