我通过监听端口建立了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从缓冲区的最开始开始。
最佳答案
用bufio.Reader包裹连接:
br := bufio.NewReader(conn)
使用二进制包通过bufio.Reader来read an unsigned varint:
n, err := binary. ReadUvarInt(br)
因为bufio.Reader可以比varint缓冲更多,所以应该对所有后续的连接读取使用bufio.Reader。
关于go - 读取net.Conn缓冲区的第一个UVarInt,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35786264/