golang tpc 粘包处理
func Decode(reader *bufio.Reader) {
peek, err := reader.Peek(4)
if err != nil {
if err != io.EOF {
log.Println(err)
} else {
return
}
}
buffer := bytes.NewBuffer(peek)
var length int32
err = binary.Read(buffer, binary.BigEndian, &length)
if err != nil {
log.Println(err)
}
if int32(reader.Buffered()) < length+4 {
return
}
data := make([]byte, length+4)
_, err = reader.Read(data)
if err != nil {
return
}
log.Println("received msg", string(data[4:]))
}