Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ windows上的无连接命名管道_C++_C - Fatal编程技术网

C++ windows上的无连接命名管道

C++ windows上的无连接命名管道,c++,c,C++,C,我想做的是创建一个命名管道服务器,在连接的对等方之间路由消息。在Windows上,您似乎首先必须创建一个管道,然后将其连接到客户端,然后从连接的客户端管道读取所需的消息,然后将该句柄绑定到该客户端,并且必须创建一个新的命名管道。是否没有办法轻松地将所有客户机多路复用到一个句柄中,这样我就不必分别读取每个客户机的数据?要从服务器写入客户机,显然必须使用客户机的句柄。也许服务器可以在每次处理请求时关闭连接,但这似乎有点不必要的浪费。我宁愿避免使用共享内存实现自己的命名管道…您首先必须创建一个管道,然

我想做的是创建一个命名管道服务器,在连接的对等方之间路由消息。在Windows上,您似乎首先必须创建一个管道,然后将其连接到客户端,然后从连接的客户端管道读取所需的消息,然后将该句柄绑定到该客户端,并且必须创建一个新的命名管道。是否没有办法轻松地将所有客户机多路复用到一个句柄中,这样我就不必分别读取每个客户机的数据?要从服务器写入客户机,显然必须使用客户机的句柄。也许服务器可以在每次处理请求时关闭连接,但这似乎有点不必要的浪费。我宁愿避免使用共享内存实现自己的命名管道…

您首先必须创建一个管道,然后将其连接到客户端

不完全是。服务器进程创建管道,但客户端连接自身。此外,如果服务器尚未创建管道,客户端可以尝试连接和阻止

您从连接的客户端管道读取所需的消息,然后将该句柄绑定到该客户端。符合事实的不会阻止你立即等待下一个客户

是否没有办法轻松地将所有客户端多路复用到一个句柄中?。不,那会破坏把手的作用。这就是您需要解复用客户端的部分


您似乎忽略了一点,即您可以将管道实例的数量设置为“管道无限制”实例,并使用共享文件读取所有管道实例。回调将告诉您哪个句柄以及哪个管道有可用的数据。

为了从所有句柄中读取数据,我必须执行WaitMultipleObjectsEx,对吗?这有一个最大限制64,这不是一个完整的很多。我错过了什么吗?@christianO:SleepEx就足够了,它需要0个句柄。完成例程只需要一个可警报的线程即可运行。它将获得重叠结构,其中包含确切的句柄。