未收到 Indy TCP 客户端数据
Indy TCP Client data not received
Update 看来这个问题与 Indy 的关系并不像我想的那么密切,更多的是关于多线程的话题。我不会 100% 相信这个问题。
我有一个正在运行的应用程序,它使用 Indy TCP 客户端与通信伙伴交换 ascii 字符串。
通信流程如下所示:
- [Indy Level] 发件人发送字符串
- [TCP 级别] Wireshark 告知此数据包已交付给接收者
- [TCP Level] 接收方发送一个 TCP ACK 来确认这个数据包
- [Indy Level] 接收者的 IOHandler.ReadLn 方法 return 数据
- [Indy Level] 通过 writeLn() 向原始发送者发送逻辑确认
最近我注意到那个通信有问题,在摆弄wireshark后我得到了下图:
- [Indy Level] 发件人发送字符串
- [TCP 级别] Wireshark 告知此数据包已交付给接收者
- [TCP Level] 接收方发送一个 TCP ACK 来确认这个数据包
- [Indy Level] 收件人的 IOHandler.ReadLn 方法不return 任何数据
- 没有可用于收件人的数据,因此无事可做
超时后,发件人再次发送原始邮件,因为没有来自收件人的逻辑确认。
所以我的问题是:如果 wireshark 告诉我底层的 TCP 机制完成了他们的工作,Indy 客户端怎么可能没有可用数据?
此致,
附件
[已解决]
雷米提供的提示是正确的。
我在其读取线程之外调用 TCP 客户端的 Connected
,这弄乱了输入缓冲区并导致未出现消息症状。
删除那个(不必要的)检查解决了这个问题。
Update 看来这个问题与 Indy 的关系并不像我想的那么密切,更多的是关于多线程的话题。我不会 100% 相信这个问题。
我有一个正在运行的应用程序,它使用 Indy TCP 客户端与通信伙伴交换 ascii 字符串。 通信流程如下所示:
- [Indy Level] 发件人发送字符串
- [TCP 级别] Wireshark 告知此数据包已交付给接收者
- [TCP Level] 接收方发送一个 TCP ACK 来确认这个数据包
- [Indy Level] 接收者的 IOHandler.ReadLn 方法 return 数据
- [Indy Level] 通过 writeLn() 向原始发送者发送逻辑确认
最近我注意到那个通信有问题,在摆弄wireshark后我得到了下图:
- [Indy Level] 发件人发送字符串
- [TCP 级别] Wireshark 告知此数据包已交付给接收者
- [TCP Level] 接收方发送一个 TCP ACK 来确认这个数据包
- [Indy Level] 收件人的 IOHandler.ReadLn 方法不return 任何数据
- 没有可用于收件人的数据,因此无事可做
超时后,发件人再次发送原始邮件,因为没有来自收件人的逻辑确认。
所以我的问题是:如果 wireshark 告诉我底层的 TCP 机制完成了他们的工作,Indy 客户端怎么可能没有可用数据?
此致, 附件
[已解决]
雷米提供的提示是正确的。
我在其读取线程之外调用 TCP 客户端的 Connected
,这弄乱了输入缓冲区并导致未出现消息症状。
删除那个(不必要的)检查解决了这个问题。