读取net.Conn缓冲区的第一个UVarInt

时间:2016-03-04 01:16:40

标签: go tcp tcpserver

我通过侦听端口设置了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从缓冲区的最开始处开始。

1 个答案:

答案 0 :(得分:3)

bufio.Reader包裹连接:

br := bufio.NewReader(conn)

通过bufio.Reader:

将二进制包用于read an unsigned varint
n, err := binary. ReadUvarInt(br)

因为bufio.Reader可以缓冲多于varint,所以你应该使用bufio.Reader来连接所有后续读取。