【问题标题】:Emulate incoming network messages for Indy模拟 Indy 的传入网络消息
【发布时间】:2009-04-29 07:39:13
【问题描述】:

是否可以使用 Indy 模拟传入的消息(如果它很重要:我使用的是 Indy 10 和 Delphi 2009)?我希望能够在本地创建这些消息,并且我希望 Indy 相信它们来自网络中的特定客户端。所有内部 Indy 处理(接收消息的线程的选择等)应该与消息通过网络到达时完全相同。

对此有什么想法吗?提前感谢您的任何提示。

【问题讨论】:

    标签: delphi networking indy


    【解决方案1】:

    您想要做的与 Indy 无关,因为您需要在低得多的级别上执行此操作。让 Indy 相信消息来自特定客户端的最简单方法是将准备好的数据包注入网络堆栈。在 Google 或 Wikipedia 上阅读 TCP 数据包注入。 EtterCap 就是这样一种工具,它允许将数据包注入已建立的连接。但是,这肯定会进入灰色地带,因为某些工具在某些国家/地区是非法的。

    无论如何,恕我直言,这一切都太复杂了。我不知道您到底想做什么,但是专门准备的客户端或服务器是在开发服务器或客户端应用程序时模拟某些行为的更好工具。你可以在本地运行它们,或者如果你需要不同的 IP 地址或子网,你可以用虚拟机做很多事情。

    【讨论】:

      【解决方案2】:

      Indy 没有为此提供任何内置机制,但我会不由自主地建议构建一个小型测试应用程序(或套件),该应用程序在您的开发机器上本地运行并连接到您的 Indy 服务器应用程序重播消息。

      如果 TCP 连接是在本地或从远程主机建立的,这应该与您的 Indy 服务器应用程序无关,因为创建服务器线程和处理命令的机制与这两种情况相同。

      我的最后一次工作涉及使用 Indy,我们所有的测试都是使用类似的 Resender 类型的应用程序完成的,该应用程序将加载本地消息文件并将这些文件发送到 Indy 服务器应用程序。

      HTH,祝你好运!

      【讨论】:

      • 但是:Indy 将获得本地运行的应用程序的 IP 地址和端口号,并且传入消息的处理在为该连接创建的额外侦听器线程中运行。它与发送消息的另一个客户端的效果不同。不过还是谢谢你的回答!
      • 我发现您的评论有点令人困惑,因为 Indy 会为任何传入连接(无论是本地连接还是远程连接)创建一个新的侦听器线程。我假设您正在使用 TIDTCPServer 并定义了您的命令处理程序。 TidTCPServer 为建立的任何新连接创建一个新线程,并在该新创建线程的上下文中处理命令处理程序。
      • 没错!而且我希望在客户端特定的侦听器线程中执行命令,而无需客户端发送消息。明白了吗?
      • 啊!!一分钱滴!抱歉...咖啡还没喝完!
      【解决方案3】:

      您可以做的一件事是创建虚拟机来运行您的测试客户端,这样它们就不会被视为“本地机器”,并且使用 VMS 创建一个复杂的网络相当简单——只要您有足够的内存和磁盘空间。使用 VM 进行测试的另一个优点是,您可以在专注于部署的时候完全消除开发环境。令人惊讶的是,一个人可以节省多少时间。

      VirtualPC 可从 Microsoft 免费下载,运行良好。 VMWare 有另一种选择,但要花更多的钱才能开始。出于开发目的,我更喜欢桌面版本,但服务器版本也很好用。您仍然需要获得许可证才能安装虚拟操作系统。 MSDN 会员资格可能是最便宜的方式,它允许您为其他风格的操作系统构建测试环境。

      【讨论】:

      • VMWare Server是免费的,也是VMWare ESXi,和Sun的VirtualBox
      【解决方案4】:

      Indy 具有用于跨平台支持的抽象堆栈机制 (IDStack.pas) 我认为您可以破解 Windows 堆栈 (IdStackWindows.pas)。这是一个类。你甚至可以考虑派生它并重写一些函数来进行破解。

      【讨论】:

        猜你喜欢
        • 2016-03-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多