【发布时间】:2015-01-10 15:29:46
【问题描述】:
我知道 TCP 保证所有数据包都会到达。但是一个数据包可以分成2个或更多吗?我正在使用带有类 QTcpSocket 的 Qt,我想知道只有当完整数据包到达时才会发出 ReadyRead() 信号。或者换句话说,以第一个字节发送数据包大小然后在循环中等待直到所有字节都到达是否有任何意义?或者我可以打电话给socket->readAll(),我必须得到一整包?
【问题讨论】:
-
TCP 通信是基于流的。在用户模式程序中,您无权访问物理数据包。您需要实现流解析逻辑。例如,如果发送方发送 12 和 34,接收方可能会将它们读取为 12 34 或 1234 或 1 2 3 4 或 123 4 等。您的程序必须正确处理所有这些情况。