TCP粘包本质是其面向流无边界特性所致,必须在应用层定义协议边界:推荐固定长度头(如4字节大端序长度)方式,或使用不与业务冲突的分隔符;切忌依赖Read返回完整性或用Sleep等不可靠方式“猜测”包界。
TCP粘包问题本质是TCP面向流的特性导致的:数据没有天然边界,发送端多次Write可能被合并(粘包),或一次Write被拆成多次Read(拆包)。Golang中不能依赖“一次Read对应一个业务包”,必须在应用层约定协议边界。核心思路只有两个:加长度头 或 加分隔符。
最常用、最高效、最易扩展的方式。在每条消息前加固定字节(如4字节)表示后续消息体长度。
uint32(大端序),再写原始数据;用binary.Write或binary.BigEndian.PutUint32确保字节序一致n → 再循环读满n字节 → 才算完整一条消息io.EOF和io.ErrUnexpectedEOF;使用io.ReadFull代替conn.Read可自动重试未读满情况在消息末尾添加特殊标记(如\n、\r\n或0x00),适用于日志推送、简单指令等场景。
Write后追加分隔符,例如conn.Write(append([]byte("hello"), '\n'))
Read,需用bufio.Scanner配合SplitFunc自定义切分逻辑,或手动缓存+查找分隔符位置很多初学者试图靠time.Sleep、conn.SetReadDeadline或“等10ms再读”来“猜”包边界——这不可靠且严重损害性能和稳定性。
Read会返回完整消息;TCP不保证消息粒度Read调用后就解析;必须累积缓冲区,按协议规则切分Read返回的n值;它可能小于预期,尤其在网络不稳定时接收端核心逻辑示例:
// 缓冲区用于累积未处理数据
var buf bytes.Buffer
for {
// 先读4字节长度头
var he
ader [4]byte
if _, err := io.ReadFull(conn, header[:]); err != nil {
log.Println("read header failed:", err)
break
}
length := binary.BigEndian.Uint32(header[:])
// 再读length字节消息体
msg := make([]byte, length)
if _, err := io.ReadFull(conn, msg); err != nil {
log.Println("read message failed:", err)
break
}
handle(msg) // 处理完整业务包
}
更健壮的做法是把粘包处理封装为PacketConn或使用gob/protobuf序列化层自带长度前缀能力(如proto.MarshalOptions{Deterministic: true}配合自定义传输层)。
基本上就这些。选长度头还是分隔符,取决于你的协议是否允许嵌入控制字符、是否需要高性能、以及是否已有上下游约定。只要守住“边界由协议定义,不由TCP保证”这一条,粘包就不难解。
# go
# golang
# app
# 字节
# ai
# EOF
# 封装
# 循环
# append
# 分隔符
# 自定义
# 切分
# 不与
# 再读
# 应用层
# 这一
# 就不
# 已有
# 适用于
相关文章:
建站之星体验版:智能建站系统+响应式设计,多端适配快速建站
建站之星后台密码遗忘?如何快速找回?
制作国外网站的软件,国外有哪些比较优质的网站推荐?
简单实现Android文件上传
建站之星伪静态规则如何正确配置?
定制建站平台哪家好?企业官网搭建与快速建站方案推荐
定制建站流程解析:需求评估与SEO优化功能开发指南
巅云智能建站系统:可视化拖拽+多端适配+免费模板一键生成
如何选择美橙互联多站合一建站方案?
制作网站公司那家好,网络公司是做什么的?
javascript中的try catch异常捕获机制用法分析
ppt制作免费网站有哪些,ppt模板免费下载网站?
教育培训网站制作流程,请问edu教育网站的域名怎么申请?
香港服务器建站指南:免备案优势与SEO优化技巧全解析
如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?
如何配置FTP站点权限与安全设置?
建站之星CMS建站配置指南:模板选择与SEO优化技巧
网站制作公司排行榜,抖音怎样做个人官方网站
枣阳网站制作,阳新火车站打的到仙岛湖多少钱?
中山网站推广排名,中山信息港登录入口?
高端智能建站公司优选:品牌定制与SEO优化一站式服务
武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?
存储型VPS适合搭建中小型网站吗?
网站制作价目表怎么做,珍爱网婚介费用多少?
广州营销型建站服务商推荐:技术优势与SEO优化解析
图册素材网站设计制作软件,图册的导出方式有几种?
大连网站制作公司哪家好一点,大连买房网站哪个好?
较简单的网站制作软件有哪些,手机版网页制作用什么软件?
高端建站如何打造兼具美学与转化的品牌官网?
建站之星安装失败:服务器环境不兼容?
电视网站制作tvbox接口,云海电视怎样自定义添加电视源?
如何通过VPS建站无需域名直接访问?
黑客如何通过漏洞一步步攻陷网站服务器?
如何挑选高效建站主机与优质域名?
网站插件制作软件免费下载,网页视频怎么下到本地插件?
制作网站的模板软件,网站怎么建设?
建站之星后台管理:高效配置与模板优化提升用户体验
如何确认建站备案号应放置的具体位置?
微信小程序制作网站有哪些,微信小程序需要做网站吗?
北京专业网站制作设计师招聘,北京白云观官方网站?
公司网站建设制作费用,想建设一个属于自己的企业网站,该如何去做?
如何快速配置高效服务器建站软件?
网站按钮制作软件,如何实现网页中按钮的自动点击?
企业宣传片制作网站有哪些,传媒公司怎么找企业宣传片项目?
Swift中循环语句中的转移语句 break 和 continue
网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?
制作网站建设的公司有哪些,网站建设比较好的公司都有哪些?
Python多线程使用规范_线程安全解析【教程】
头像制作网站在线制作软件,dw网页背景图像怎么设置?
网站企业制作流程,用什么语言做企业网站比较好?
*请认真填写需求信息,我们会在24小时内与您取得联系。