包的定义格式是长度,校验码和json内容
package main
import (
"bytes"
"encoding/binary"
"encoding/json"
"fmt"
"hash/crc32"
"io"
"net"
"os"
)
type Register struct {
ACTION int32
SID int32
}
type Packet struct {
length uint32
crc32 uint32
info string
}
func (p Packet) Encode() []byte {
buf2 := new()
var length int = len([]byte())
err := (buf2, , (int32)(length))
checkError(err)
err = (buf2, , []byte())
checkError(err)
buf := new()
= uint32(() + 8)
err = (buf, , )
checkError(err)
p.crc32 = (())
err = (buf, , p.crc32)
checkError(err)
err = (buf, , ())
checkError(err)
return ()
}
func (p *Packet) Decode(buff []byte) {
buf := (buff)
err := (buf, , &())
checkError(err)
()
err = (buf, , &(p.crc32))
checkError(err)
buf2 := (buff[8:])
crc := (())
if crc != p.crc32 {
(" crc not check")
}
= (string)(())
("%s", )
}
func main() {
m := Register{20004, 6}
b, err := (m)
checkError(err)
var packet Packet
= string(b)
buf := ()
(len(buf))
var msg Packet
(buf)
(0)
}
func checkError(err error) {
if err != nil {
(, "Fatal error: %s", ())
(1)
}
}