xialeistudio / xialeistudio.github.io

blog
5 stars 0 forks source link

golang解决TCP粘包问题 - 每天进步一点点 #20

Open xialeistudio opened 4 years ago

xialeistudio commented 4 years ago

https://www.ddhigh.com/2018/03/02/golang-tcp-stick-package.html

pplmx commented 2 years ago

Hi

p.Length-8-2-p.HostnameLength-2-p.TagLength

定义的 Package

type Package struct {
    Version        [2]byte // 协议版本,暂定V1
    Length         int16   // 数据部分长度
    Timestamp      int64   // 时间戳
    HostnameLength int16   // 主机名长度
    Hostname       []byte  // 主机名
    TagLength      int16   // 标签长度
    Tag            []byte  // 标签
    Msg            []byte  // 日志数据
}
xialeistudio commented 2 years ago

这个没有统一规范,可以直接记录Msg长度哈

pplmx commented 2 years ago

Thanks♪(・ω・)ノ

aikoder commented 2 years ago

还有一种不完整的包只是内容没有包含包头的,按照以上这个版本,那是不是解析不了?

pplmx commented 2 years ago

@kmalloc8 还有一种不完整的包只是内容没有包含包头的,按照以上这个版本,那是不是解析不了?

你是指 MSG 为空么? 根据 Length 可以解析出来的, 因为空的长度是 0

aikoder commented 2 years ago

@pplmx

@kmalloc8 还有一种不完整的包只是内容没有包含包头的,按照以上这个版本,那是不是解析不了?

你是指 MSG 为空么? 根据 Length 可以解析出来的, 因为空的长度是 0

比如半包呢?

pplmx commented 2 years ago

@pplmx

@kmalloc8 还有一种不完整的包只是内容没有包含包头的,按照以上这个版本,那是不是解析不了?

你是指 MSG 为空么? 根据 Length 可以解析出来的, 因为空的长度是 0

比如半包呢?

解析异常

xialeistudio commented 2 years ago

还有一种不完整的包只是内容没有包含包头的,按照以上这个版本,那是不是解析不了?

没有包头不能知道有多长的包体,因此解析不出来