sockets - 未收到 Indy TCP 客户端数据

标签 sockets networking tcp wireshark indy

更新 似乎这个问题不像我想的那样与 Indy 密切相关,更多的是关于多线程的主题。我不会 100% 相信这个问题。

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

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

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

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

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

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

问候, 附件

最佳答案

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

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

关于sockets - 未收到 Indy TCP 客户端数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38696651/

相关文章:

vb.net - 在 vb.net 中使用 TcpClient 发送字符串

node.js - 在客户端之间发送消息socket.io

java - 将阻塞 Socket 对象转换为 SocketChannel 的套接字?

java - Arg[0] 声明为默认值

powershell - 使用Powershell在断开连接的网卡上设置静态IP,是否可以?

Python 对串行/以太网无动于衷

ruby - 多处理器/多线程Ruby Web服务器如何工作?

testing - 拦截和修改进出tomcat的流量

java - JpcapCaptor.getDeviceList() 返回一个空数组

networking - UDP/TCP中使用伪报头的意义是什么