【问题标题】:How to look for any and all computers on a network which are using my service?如何查找网络上正在使用我的服务的所有计算机?
【发布时间】:2011-12-06 02:10:43
【问题描述】:

我有一对自定义的客户端/服务器套接字(TJDServerSocket 和 TJDClientSocket),它们将 TServerSocket 和 TClientSocket 包装在 ScktComp 单元中。我没有任何问题要解决,但想知道一些事情。我想向客户端添加一项功能,以自动搜索网络以查找服务器套接字的任何实例(特别是我的服务器组件)。

我愿意接受任何建议,但必须针对 Delphi 7 中 ScktComp 单元的使用。

Here's a link to the components of mine.

【问题讨论】:

  • 恕我直言;你不应该再使用 serversocket/clientsocket 了。使用真正的套接字库,如 Indy、ICS、Synapse 或其他功能齐全的库。
  • 如果每次有人告诉我,我都有一个五分钱:D
  • 由你自己决定。 :-)
  • 首先,我喜欢具有挑战性的项目,从头开始构建事物。其次,我计划消除该层并直接使用 WinSock API,这基本上是所有与套接字相关的工作。

标签: delphi sockets networking delphi-7 winsock


【解决方案1】:

我自己从未使用过 TServerSocket 和 TClientSocket,而且我手边没有帮助文件,所以我无法立即查看这是否适用于这些组件。 对于我做的一个项目,我也需要类似的东西。我最终使用 UDP 广播了一个发现请求(当然在同一个子网内)。服务器在特定端口上侦听此类请求,将回复其数据。当存在多个服务器时(这种情况虽然很少发生),客户端只需选择具有所需服务和负载最小的服务器。该负载是服务器发回的数据的一部分。 结果很好,写起来也不是那么难,而且效率也相当高。

请求协议完全由您决定。我设计的那个允许客户端发送详细说明他们需要的服务的请求,服务器回复列出他们的服务和负载(= 正在使用的连接客户端)。 在选择要与之交谈的服务器后,客户端会为自己注册所需的服务,然后就可以使用它们。

希望这会有所帮助。

【讨论】:

  • 听起来不错的架构,我的架构将用于同步跨网络应用程序以显示基本信息,例如即时消息、会议公告、文件复制,以及我可能需要做的任何事情。它也适用于我的跨网络速度测试系统 - 每个应用程序都运行服务器和客户端套接字,并且许多应用程序需要直接相互连接。
  • 通过 UDP 广播的廉价而肮脏的服务发现版本在单段家庭局域网和小型办公网络上很好,但在企业网络中可能无法运行,具体取决于它们的防火墙、UDP 路由和物理局域网布局。
  • 确实提到它必须在同一个子网上。我在食品加工厂的网络上使用它;某些 LAN 配置可能确实适用。
【解决方案2】:

有一些用于服务发现的标准协议。例如:http://en.wikipedia.org/wiki/Zero_configuration_networking

【讨论】:

    【解决方案3】:

    Mailslots 是一个不错的选择。它将广播到您子网上的每台 PC。请参阅 Jeroen 对这个问题的回答: Suggestions on writing a TCP IP messaging system (Client/Server) using Delphi 2010

    【讨论】:

      【解决方案4】:

      搜索就像端口扫描一样简单。

      如果您不喜欢暴力破解方法,服务器可以将自己注册到一个众所周知的服务应用程序(可能是 Web 服务器),客户端可以连接到服务应用程序进行询问。比广播还安静。

      有了更多信息,例如有关网络的详细信息(它是给谁的?),我可以提出更准确的答案。

      【讨论】:

      • 好吧,由于这些组件对于任何类型的项目都是通用的,因此需要尽可能远地搜索。我确信我至少必须在子网内进行搜索,但我确实希望它能够在更大的公司网络上使用。
      • 从技术上讲,这些组件也可以在互联网上工作(通过使用 NAT 策略等),但我不希望这个服务扫描程序能够通过数十亿个 IP 搜索互联网: P 只是直接的子网。
      • 端口扫描不是要走的路。这可能只适用于个人使用。不过,我的第二个建议会很有效。提供注册/发现 API 作为增值服务或按月收费。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-08
      • 2020-11-04
      • 2014-04-16
      • 2015-03-29
      • 1970-01-01
      • 1970-01-01
      • 2013-04-14
      相关资源
      最近更新 更多