【问题标题】:Win32 named pipes and remote clientsWin32 命名管道和远程客户端
【发布时间】:2010-10-17 16:31:48
【问题描述】:

在给定计算机 A 的 IP 地址的情况下,我可以从计算机 B 访问计算机 A 上的命名管道吗?如果是这样,我需要做些什么才能做到这一点?

【问题讨论】:

  • 哪个操作系统?您使用哪种语言?
  • Windows 和 Unix/Linux 上的规则是不同的——知道哪一个总是至关重要的。
  • @Taylor Sullivan:是的,Windows 和 Linux 命名管道有点不同。我在下面给出了 windows 的信息。

标签: c++ windows winapi pipe named-pipes


【解决方案1】:

是的,您可以通过命名管道通过网络进行通信。您可以像 UNC 路径一样指定管道名称:

\\computername\pipe\pipename

或通过 IP

\\192.168.0.100\pipe\pipename

您可以对任何 LAN 机器或通过 VPN 连接到 LAN 的任何远程机器执行此操作。

您使用所有相同的管道 Win32 API 函数,例如 CreateFile。要创建管道,请使用 CreateNamedPipe

在您可以使用远程管道之前,您必须与远程计算机建立有效连接。为此,您将使用像 WNetUseConnection 这样的 API。或者,如果您的计算机在同一个域上,或者具有相同的 u/p,则根本不需要使用 WNetUseConnection。

如果您将程序作为服务运行,则无法使用本地系统帐户访问 LAN 资源。该服务必须使用另一个帐户进行配置。

【讨论】:

  • 您不应使用 WNetUseConnection。处理 htoken = NULL; LogonUser(L"用户名", L"域名", L"密码", 9, 3, &htoken); int ret = ImpersonateLoggedOnUser(htoken);
  • 有人能解释一下它是如何在 linux 上使用 WLAN 作为物理连接层的吗?
【解决方案2】:

命名管道可用于在网络上不同计算机上的进程之间提供 IPC。参考MSDN

如果您使用的是 Windows XP SP2、Windows Server 2003 SP1 和更高版本,请不要忘记启用命名管道过滤。参考here

【讨论】:

    【解决方案3】:

    请注意,Windows 下的管道非常糟糕。有很多关键的细节需要你做到完全正确,否则它们会奇怪地失败并且文档不符合标准。

    如果可以,请使用套接字。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多