【发布时间】:2018-12-31 09:24:43
【问题描述】:
我对这个答案进行了高低搜索。可以编写一个命名管道服务器,其中客户端建立的连接是持久的,直到您关闭应用程序?这将在 C/C++ 中。不要求任何人真正做到这一点,因为我有能力。如果我的问题不清楚,要更详细地解释一下,我希望能够让客户端连接到服务器,然后能够来回传递数据,而不必在每个数据事务结束时终止连接然后为下一个重新开始一个新的。似乎在我看到或阅读的每个示例中,事务只持续了一次数据交换。这似乎很浪费而且非常耗时。然后我想线程化它,这样我就可以在同一个命名管道上拥有多达 8 个客户端。如果您知道执行此操作的示例代码,那也很棒。已经阅读了微软的示例,它们似乎每次都是与新连接的单一数据交换。
我的困惑在于 readfile() 和 writefile() 函数。他们需要管道句柄和指向数据结构的指针,就像硬盘上的文件 R/W 一样。这些文件可以在程序启动时打开、使用,最后在您退出应用程序之前关闭。这样做有风险,但有时是必要的。所以我希望我的服务器应用程序能够控制而不是客户端。
提前致谢。如果您不清楚,我会回答任何问题。
【问题讨论】:
-
每个客户端连接一个管道实例,但我们当然可以连接/断开连接以重用池中的实例。
-
无法与多个客户端共享管道实例。考虑
GetNamedPipeClientComputerName、GetNamedPipeClientProcessId、GetNamedPipeClientSessionId和ImpersonateNamedPipeClient等函数。所有这些都是为每个实例一个客户端连接而设计的,这直接涉及到 npfs.sys 中命名管道文件系统的基本实现以及它们是如何通过 SMB 实现的。
标签: windows named-pipes