Delphi中的TCP侦听器

时间:2014-07-22 03:42:20

标签: delphi tcp indy

我想实现一个演示应用程序来通过TCP / IP监听数据。 enter image description here

数据发送器将始终传输一系列或ASCII字符或一系列字符串。它将数据馈送到TCP / IP地址(例如127.0.0.1:22)。这可能是GPS发射器。

我想通过单击开始按钮并通过TCP / IP监听数据来实现接收数据的演示应用程序,并相应地显示它。

如果我错了,请纠正我,我认为我不能为此目的使用服务器/客户端服务器。我尝试使用TIdTcpClient创建客户端应用程序,它只接收一次数据。我不认为Indy有一个TCP侦听组件。

提前致谢。

2 个答案:

答案 0 :(得分:2)

如果您想使用TIdTCPServer监视某些设备与计算机上某些其他程序之间的网络通信,则无法正常工作。为什么?一旦Indy读取网络数据,它就会将其标记为已处理并从网络缓冲区中删除。因此,数据可能甚至无法到达您计算机上的其他程序。解决方法是将应用程序设计为实际类似于网桥的工作方式。您的应用程序侦听一个端口上的数据,然后将该数据转发到另一个程序正在侦听的另一个端口上。但主要的问题是你必须使这两种方式都有效。

您需要的是一个能够查看网络数据但不与之交互的组件。这通常在驱动程序级别完成。

现在,如果不是必须在您自己的软件中拥有此类功能,但您只想获取我建议的数据,那么您可以尝试使用Wireshark(http://www.wireshark.org/)。 Wireshark是一款功能强大的freware软件,它可以让您监控所有协议上的所有netwrok流量,而不会造成任何中断。为了使该软件能够工作,它将用于拦截网络数据的特殊驱动程序。

如果您的应用程序需要此功能,可能您希望在应用程序中使用相同的驱动程序。

答案 1 :(得分:1)

根据您的图表,我认为您的实施也可能基于面向消息的中间件,使用接收GPS发送器或其他数据的消息代理。

然后,消息代理将在内部存储数据并将其转发给所有连接的感兴趣的客户端。在这种情况下,典型的消息传递模式是“主题”,它广播类似于广播电台的消息。

因此,中间件将确保收集信息(可选地也可以保存到磁盘),然后保证传送到接收器。即使在一段时间内离线的接收机仍然接收到在没有收听的情况下创建的GPS消息(“追溯消费者”),也可以做到这一点。

有许多流行的免费开源消息代理,其中大部分也可以与Delphi一起使用。