未收到 Indy TCP 客户端数据

Indy TCP Client data not received

Update 看来这个问题与 Indy 的关系并不像我想的那么密切,更多的是关于多线程的话题。我不会 100% 相信这个问题。

我有一个正在运行的应用程序,它使用 Indy TCP 客户端与通信伙伴交换 ascii 字符串。 通信流程如下所示:

  1. [Indy Level] 发件人发送字符串
  2. [TCP 级别] Wireshark 告知此数据包已交付给接收者
  3. [TCP Level] 接收方发送一个 TCP ACK 来确认这个数据包
  4. [Indy Level] 接收者的 IOHandler.ReadLn 方法 return 数据
  5. [Indy Level] 通过 writeLn() 向原始发送者发送逻辑确认

最近我注意到那个通信有问题,在摆弄wireshark后我得到了下图:

  1. [Indy Level] 发件人发送字符串
  2. [TCP 级别] Wireshark 告知此数据包已交付给接收者
  3. [TCP Level] 接收方发送一个 TCP ACK 来确认这个数据包
  4. [Indy Level] 收件人的 IOHandler.ReadLn 方法不return 任何数据
  5. 没有可用于收件人的数据,因此无事可做

超时后,发件人再次发送原始邮件,因为没有来自收件人的逻辑确认。

所以我的问题是:如果 wireshark 告诉我底层的 TCP 机制完成了他们的工作,Indy 客户端怎么可能没有可用数据?

此致, 附件

[已解决] 雷米提供的提示是正确的。 我在其读取线程之外调用 TCP 客户端的 Connected,这弄乱了输入缓冲区并导致未出现消息症状。

删除那个(不必要的)检查解决了这个问题。