首页 > 解决方案 > 读取可接受数据中的特定字节数

问题描述

我有一个二进制数据包,但包的长度是它的前 4 个字节。是否有正确的方法来读取长度,然后在 GoLang 中使用 net.Conn 读取整个包?

标签: gonetworkingtcp

解决方案


尝试使用这个:

包主

导入(“编码/二进制”“io”)

func ReadPacket(r io.Reader) ([]byte, error) {
    lenB := make([]byte, 4)

    if _, err := r.Read(lenB); err != nil {
        return nil, err
    }

    //you can use BigEndian depending on the proto
    l := binary.LittleEndian.Uint32(lenB)

    packet := make([]byte, l)

    _, err := r.Read(packet)

    return packet, err
}

推荐阅读