Can';我不知道如何在我的客户机-服务器模型中实现线程
我有一个小型的服务器-客户机应用程序,它做的不多(客户机连接到服务器,通过管道发送一个号码,然后接收另一个号码) 但它一次只能使用一个连接(当一个客户端连接时,其他客户端都无法访问服务器) 我想让多个客户端同时连接到服务器成为可能,我计划使用工作线程来实现这一点 Obs: 服务器:Can';我不知道如何在我的客户机-服务器模型中实现线程,c,multithreading,client-server,named-pipes,C,Multithreading,Client Server,Named Pipes,我有一个小型的服务器-客户机应用程序,它做的不多(客户机连接到服务器,通过管道发送一个号码,然后接收另一个号码) 但它一次只能使用一个连接(当一个客户端连接时,其他客户端都无法访问服务器) 我想让多个客户端同时连接到服务器成为可能,我计划使用工作线程来实现这一点 Obs: 服务器: HANDLE namedPipe = CreateNamedPipe (CONNECT_NAMEDPIPE, PIPE_ACCESS_DUPL
HANDLE namedPipe = CreateNamedPipe (CONNECT_NAMEDPIPE,
PIPE_ACCESS_DUPLEX,
PIPE_TYPE_BYTE | PIPE_READMODE_BYTE | PIPE_WAIT,
2,
sizeof(MinMax),
sizeof(NumberList),
0, // timeout
NULL);
if (namedPipe == INVALID_HANDLE_VALUE) {
printf("Unable to create named pipe\r\nServer closing\r\n");
printf("CreateNamedPipe failed, GLE=%d.\r\n", GetLastError());
} // Error unable create pipe
else {
printf("Server created\r\n");
printf("Awaiting connection\r\n");
ConnectNamedPipe(namedPipe, NULL);
etc ...
}
因此,服务器将等待ConnectNamedPipe,直到客户端连接,然后才可用于任何其他连接
如果我想启用多个连接,我应该如何创建工作线程
如果每个连接都尝试创建一个新管道(使用新管道名称/路径-CONNECT\u NAMEDPIPE不能用于所有管道)
我如何知道其他人何时尝试连接?我的线程应该在哪里?我被卡住了。我认为伯克利插座更适合这个。如果你必须使用管道,类似这样的方法可能会奏效:
“或从池中提取”。我听说过线程池,但我不确定它们是什么意思。你能详细说明一下吗?线程池只是处于某种等待状态的线程的集合。当一个工作单元到达时,您从池中唤醒一个踏板,并指示它接受该单元。当它结束时,它又睡着了。这比为每个工作单元创建新线程要快。
HANDLE namedPipe = CreateNamedPipe (CONNECT_NAMEDPIPE,
PIPE_ACCESS_DUPLEX,
PIPE_TYPE_BYTE | PIPE_READMODE_BYTE | PIPE_WAIT,
2,
sizeof(MinMax),
sizeof(NumberList),
0, // timeout
NULL);
if (namedPipe == INVALID_HANDLE_VALUE) {
printf("Unable to create named pipe\r\nServer closing\r\n");
printf("CreateNamedPipe failed, GLE=%d.\r\n", GetLastError());
} // Error unable create pipe
else {
printf("Server created\r\n");
printf("Awaiting connection\r\n");
ConnectNamedPipe(namedPipe, NULL);
etc ...
}