char tmp[];
Buffer buffer;
// 网络循环:必须在一个循环中读取网络,因为网络数据是源源不断的。
while(1)
{
// 从TCP流中读取不定长度的一段流数据,不能保证读到的数据是你期望的长度
tcp.read(tmp);
// 将这段流数据和之前收到的流数据拼接到一起
buffer.append(tmp);
// 解析循环:必须在一个循环中解析报文,应对所谓的粘包
while(1)
{
// 尝试解析报文
msg = parse(buffer);
if(!msg)
{
// 报文还没有准备好,糟糕,我们遇到拆包了!跳出解析循环,继续读网络。
break;
}
// 将解析过的报文对应的流数据清除
buffer.remove(msg.length);
// 业务处理
process(msg);
}
}
TCP 粘包处理
最新推荐文章于 2024-04-28 19:33:21 发布