网络通信之拆包粘包处理(一)

TCP网络通信中的拆包和粘包是由于数据传输的特性引起的。

拆包(Packet Splitting)指的是发送方将数据按照一定的规则分割成多个包进行发送,而接收方可能无法准确地将这些包还原成原始的数据。这可能是因为接收方的接收缓冲区大小不足以容纳完整的数据包,或者数据包在传输过程中被分割成多个小包。

粘包(Packet Sticking)指的是发送方将多个数据包连续地发送到接收方,而接收方可能无法准确地将这些数据包分开处理。这可能是因为发送方连续发送的数据包被接收方一次性接收到,或者多个数据包在传输过程中被合并成一个大的数据包。

这些问题的产生是因为TCP是一个面向流的协议,它只关心数据的传输,而不关心数据的边界。TCP将数据流划分为一个个的数据段进行传输,接收方需要根据一定的规则来解析和处理这些数据段,才能正确地还原原始的数据。

 

为了解决拆包和粘包问题,可以采用以下几种常见的方法:

- 分隔符包:发送方在数据包之间添加特定的分隔符,接收方根据分隔符来切分数据包。
- 定长包:发送方将数据固定长度地分割成多个包进行发送,接收方按照固定长度来解析和处理数据。
- 包头+包体:发送方在每个数据包的开头添加包头信息,包头中包含了数据包的长度等信息,接收方根据包头信息来解析和处理数据。

像Netty框架就提供了三种拆包粘包方式可以自定义使用。

本篇我们先拿分隔符包来举个栗子,看一下如何保证数据被正确解析。

 Server端代码:

package main

import (
	"bufio"
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值