只是负责测试datapack拆包,封包功能
()
| 9 | |
| 10 | // 只是负责测试datapack拆包,封包功能 |
| 11 | func main() { |
| 12 | //创建socket TCP Server |
| 13 | listener, err := net.Listen("tcp", "127.0.0.1:7777") |
| 14 | if err != nil { |
| 15 | fmt.Println("server listen err:", err) |
| 16 | return |
| 17 | } |
| 18 | |
| 19 | //创建服务器gotoutine,负责从客户端goroutine读取粘包的数据,然后进行解析 |
| 20 | |
| 21 | for { |
| 22 | conn, err := listener.Accept() |
| 23 | if err != nil { |
| 24 | fmt.Println("server accept err:", err) |
| 25 | } |
| 26 | |
| 27 | //处理客户端请求 |
| 28 | go func(conn net.Conn) { |
| 29 | //创建封包拆包对象dp |
| 30 | dp := zpack.NewDataPack() |
| 31 | for { |
| 32 | //1 先读出流中的head部分 |
| 33 | headData := make([]byte, dp.GetHeadLen()) |
| 34 | _, err := io.ReadFull(conn, headData) //ReadFull 会把msg填充满为止 |
| 35 | if err != nil { |
| 36 | fmt.Println("read head error") |
| 37 | break |
| 38 | } |
| 39 | //将headData字节流 拆包到msg中 |
| 40 | msgHead, err := dp.Unpack(headData) |
| 41 | if err != nil { |
| 42 | fmt.Println("server unpack err:", err) |
| 43 | return |
| 44 | } |
| 45 | |
| 46 | if msgHead.GetDataLen() > 0 { |
| 47 | //msg 是有data数据的,需要再次读取data数据 |
| 48 | msg := msgHead.(*zpack.Message) |
| 49 | msg.Data = make([]byte, msg.GetDataLen()) |
| 50 | |
| 51 | //根据dataLen从io中读取字节流 |
| 52 | _, err := io.ReadFull(conn, msg.Data) |
| 53 | if err != nil { |
| 54 | fmt.Println("server unpack data err:", err) |
| 55 | return |
| 56 | } |
| 57 | |
| 58 | fmt.Println("==> Recv Msg: ID=", msg.ID, ", len=", msg.DataLen, ", data=", string(msg.Data)) |
| 59 | } |
| 60 | } |
| 61 | }(conn) |
| 62 | } |
| 63 | |
| 64 | //阻塞 |
| 65 | select {} |
| 66 | } |
nothing calls this directly
no test coverage detected