2016-03-04 27 views
0

我有通过监听端口设置的TCP数据包连接(net.Conn)。读取net.Conn缓冲区的第一个UVarInt

conn, err := ln.Accept() 

我需要阅读Conn.Read([]byte)缓冲区,它开始于索引0

此前的第一UVarInt,我只需要第一个字节,这是很容易用做

packetSize := make([]byte, 1) 
conn.Read(packetSize) 
// Do stuff with packetSize[0] 

但是,如前所述,我需要使用net.Conn.Read()方法获得第一个可以使用的UVarInt。请记住,一个UVarInt可以有几乎任何长度,我不能确定(客户端不发送UVarInt的大小)。不过我知道UVarInt从缓冲区的一开始就开始了。

回答

3

裹有bufio.Reader连接:到通过bufio.Reader

br := bufio.NewReader(conn) 

使用二进制包:

n, err := binary. ReadUvarInt(br) 

因为bufio.Reader可以比varint缓冲更多的,你应该使用bufio.Reader进行连接上的所有后续读取。

+0

使用NewReader(conn)确实有效,但我必须使用“ReadUvarInt(br)”才能获得正确的值。 – Momo

+0

@Momo问题说,varint,而不是uvarint。更新问题以描述您的数据。我会更新答案。 –