未收到Indy TCP客户端数据

时间:2016-08-01 10:34:50

标签: sockets networking tcp wireshark indy

更新 似乎这个问题并没有像我想象的那样与Indy关系密切,而且更多关于多线程的话题。我会保持这个问题,因为我并不是100%相信。

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

  1. [Indy Level]发件人发送字符串
  2. [TCP级别] Wireshark告知此数据包已发送给收件人
  3. [TCP级别]收件人发送TCP ACK以确认此数据包
  4. [Indy Level]收件人的IOHandler.ReadLn方法返回数据
  5. [Indy Level]通过writeLn()将逻辑确认发送给原始发件人
  6. 最近我注意到那次沟通中有一个骗局,在与wireshark拼凑后,我得到了以下图片:

    1. [Indy Level]发件人发送字符串
    2. [TCP级别] Wireshark告知此数据包已发送给收件人
    3. [TCP级别]收件人发送TCP ACK以确认此数据包
    4. [Indy Level]收件人的 IOHandler.ReadLn 方法不返回任何数据
    5. 没有任何事情可做,因为没有可用于收件人的数据
    6. 在一些超时后,发件人再次发送原始邮件,因为收件人没有逻辑确认。

      所以我的问题是:如果wireshark告诉我底层的TCP机制完成了它们的工作,那么Indy Client有可能没有可用的数据吗?

      此致 ATTIX

1 个答案:

答案 0 :(得分:1)

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

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