我有一个小的服务器 - 客户端应用程序,它做的不是很多(客户端连接到服务器,通过管道发送一个数字并接收另一个号码)。
但它一次只能使用一个连接(当客户端连接时,没有其他客户端可以访问服务器)
我希望一次可以让多个客户端连接到服务器,我计划用工作线程执行此操作。
观测值:
#define CONNECT_NAMEDPIPE "\\\\.\\pipe\\ClientToServer"
服务器:
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_NAMEDPIPE不能用于所有管道)
我如何知道其他人何时尝试连接?我的线程应该在哪里?我被卡住了。
答案 0 :(得分:1)
我认为伯克利插座更适合这种情况。如果你必须使用管道,这样的东西可以工作: