我正在实现一个非常简单的TIdCmdTCPServer
,用于从我们也编写过的手机应用程序接收数据。手机应用程序以一个简单的hello命令开始,但是OnBeforeCommandHandler
带有垃圾。AData
相等'somerandomchars hello'
随机字符是非ASCII字符。
我正在使用 Delphi 2007和捆绑的Indy 10.1.5组件。我已经试过了:
- 也许我的程序造成了一些损坏,所以我做了一个非常简单的,只有一个表单和一个
TIdCmdTCPServer
。同样的结果。 - Delphi 2007 Indy组件有问题吗?我换到Delphi 10. 3了。同样的问题。
- 是我的电脑在某种程度上破坏了通信吗?我在其他Windows 10中运行了这个简单的程序,物理和虚拟都有。遇到了同样的问题。
- 可能是手机应用程序发送了错误的数据。尝试使用Putty直接发送命令。没有运气。
- 不同端口?相同
我已经搜索了这个问题,但没有找到一个页面。事实上,他们都说运行一个TIdCmdTCPServer
顺利。
最奇怪的一点是,在执行了五六个命令之后,数据读取正常。在每个事件上,随机字符都与前一个不同。在逐步执行Indy代码之后,我发现当它将要读取第一次时,它已经在输入缓冲区中具有随机字符。不同的“命令”需要不同数量的周期来开始无垃圾阅读。在“你好”,八九次(不总是一样的)。
这是什么原因造成的?我只是用以下命令启动服务器:
IdCmdTCPServer1.Active := True;
它需要一个单独的线程吗?Indy的帮助没有提到这一点。默认属性没有改变。
下面是简单应用程序的代码:
第一个
UPDATE:我们修改了cell应用程序,以便只将命令发送到echo服务器:tcpbin.com。回应接收正常。我们使用Putty将单元模拟到同一个服务器,以确保它不会生成任何垃圾。在这两个服务器中,它都运行正常。
1条答案
按热度按时间5vf7fwbs1#
您可以在多个Indy版本和多台服务器机器上重现该问题,这一事实告诉我,问题可能根本不在服务器上,而是在客户端上。例如,如果您在telnet模式下使用Putty,而不是在原始模式下。