Delphi中的TCP侦听器

Delphi中的TCP侦听器,delphi,tcp,indy,Delphi,Tcp,Indy,我想实现一个演示应用程序,通过TCP/IP监听数据。 数据发送器将始终发送一系列或ASCII字符或一系列字符串。它将数据输入TCP/IP地址(例如127.0.0.1:22),这可能是一个GPS发射机 我想实现一个用于接收数据的演示应用程序,方法是单击开始按钮,通过TCP/IP监听数据,并相应地显示数据 如果我错了,请纠正我,我认为我无法使用服务器/客户机服务器实现此目的。我试图用TIdTcpClient创建一个客户端应用程序,它只接收一次数据。我认为Indy没有TCP监听组件 提前感谢。如果您

我想实现一个演示应用程序,通过TCP/IP监听数据。

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

我想实现一个用于接收数据的演示应用程序,方法是单击开始按钮,通过TCP/IP监听数据,并相应地显示数据

如果我错了,请纠正我,我认为我无法使用服务器/客户机服务器实现此目的。我试图用
TIdTcpClient
创建一个客户端应用程序,它只接收一次数据。我认为Indy没有TCP监听组件


提前感谢。

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

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

现在,如果在您自己的软件中不一定要有这样的功能,但您只对获取我推荐的数据感兴趣,请尝试Wireshark()。Wireshark是一款功能强大的固件软件,它允许您监控所有协议上的所有netwrok流量,而不会造成任何中断。为了使该软件工作,它安装了专门的驱动程序,用于截取网络数据


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

根据您的图表,我认为您的实现也可以基于面向消息的中间件,使用接收GPS发射机或其他数据的消息代理

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

因此,中间件将确保收集信息(也可以选择将信息持久化到磁盘),然后保证将信息传递给接收者。即使在离线一段时间的接收器仍能接收在未收听时创建的GPS消息(“追溯消费者”)的情况下,也可以这样做


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

您正在寻找的是
TIdTCPServer
。它是一种客户机/服务器设计。这些数据发送器是将数据发送到服务器的客户端。您好,谢谢您的评论。这就是我困惑的地方。如果我使用
TIdTCPServer
,我将得到异常“无法绑定套接字”。地址和端口已在使用'。我认为数据发送器(在我的场景中)正在使用该端口。这就是为什么我认为,这不是客户机/服务器设计。我错过了那个端口号。22是SSH协议的默认端口。据我记忆所及,Indy没有SSH协议实现。很抱歉,我举了一个糟糕的例子,选择端口号为22。端口号可以是任何东西。(我将更新图表,谢谢)我更关心C的
TcpListener
,类似于Delphi或Indy。我完全错过了侦听部分(图中的云),认为OP想要使用这些数据包。我应该先煮杯咖啡,然后再说:-)另一个解决方案(而不是深入到驱动程序级别)将是一个不同的协议-例如,UDP,其中消息被“消费”当被接收者读取时,由于OP试图监听来自外部设备的消息,我怀疑他是否有能力影响用于dta传输的协议。