我通过侦听端口设置了TCP数据包连接(net.Conn
)。
conn, err := ln.Accept()
我需要读取Conn.Read([]byte)
缓冲区的第一个 UVarInt ,它从索引0开始。
以前,我只需要第一个字节,这很容易使用
packetSize := make([]byte, 1)
conn.Read(packetSize)
// Do stuff with packetSize[0]
然而,如前所述,我需要使用net.Conn.Read()方法获得我能够达到的第一个UVarInt。请记住,UVarInt几乎可以有任何长度,我无法确定(客户端不会发送UVarInt的大小)。但我确实知道UVarInt从缓冲区的最开始处开始。
答案 0 :(得分:3)
用bufio.Reader包裹连接:
br := bufio.NewReader(conn)
通过bufio.Reader:
将二进制包用于read an unsigned varintn, err := binary. ReadUvarInt(br)
因为bufio.Reader可以缓冲多于varint,所以你应该使用bufio.Reader来连接所有后续读取。