【问题标题】:Windows Named Pipes connectionsWindows 命名管道连接
【发布时间】:2018-12-31 09:24:43
【问题描述】:

我对这个答案进行了高低搜索。可以编写一个命名管道服务器,其中客户端建立的连接是持久的,直到您关闭应用程序?这将在 C/C++ 中。不要求任何人真正做到这一点,因为我有能力。如果我的问题不清楚,要更详细地解释一下,我希望能够让客户端连接到服务器,然后能够来回传递数据,而不必在每个数据事务结束时终止连接然后为下一个重新开始一个新的。似乎在我看到或阅读的每个示例中,事务只持续了一次数据交换。这似乎很浪费而且非常耗时。然后我想线程化它,这样我就可以在同一个命名管道上拥有多达 8 个客户端。如果您知道执行此操作的示例代码,那也很棒。已经阅读了微软的示例,它们似乎每次都是与新连接的单一数据交换。

我的困惑在于 readfile() 和 writefile() 函数。他们需要管道句柄和指向数据结构的指针,就像硬盘上的文件 R/W 一样。这些文件可以在程序启动时打开、使用,最后在您退出应用程序之前关闭。这样做有风险,但有时是必要的。所以我希望我的服务器应用程序能够控制而不是客户端。

提前致谢。如果您不清楚,我会回答任何问题。

【问题讨论】:

  • 每个客户端连接一个管道实例,但我们当然可以连接/断开连接以重用池中的实例。
  • 无法与多个客户端共享管道实例。考虑GetNamedPipeClientComputerNameGetNamedPipeClientProcessIdGetNamedPipeClientSessionIdImpersonateNamedPipeClient 等函数。所有这些都是为每个实例一个客户端连接而设计的,这直接涉及到 npfs.sys 中命名管道文件系统的基本实现以及它们是如何通过 SMB 实现的。

标签: windows named-pipes


【解决方案1】:

我对你的回答并不感到惊讶。我真的想要一种方法来保持每个实例的连接打开,但是由于这不是管道的工作方式,所以我明白了。我设计了一种更好的方法来让我的应用程序相互通信。我最初有一台服务器和许多客户端,所以我把它转过来,现在有一个客户端和许多服务器,每个服务器都有不同的管道名称。由于我的客户端(即服务器)完成了大部分消息的启动,因此我现在可以更好地管理我通过消息/管道发送和请求数据的方式。唯一的缺点是不是一次将数据提供给所有这些人,而是几微秒的数量的朋友。在我花很多时间在代码上之前,请让我知道这是否不能像我预期的那样工作。谢谢。欢迎提出任何建议。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-10
    • 2010-12-18
    • 2012-01-19
    • 1970-01-01
    相关资源
    最近更新 更多