我有一个网兜。我需要离线阅读结构化协议。即我有
messagelength|type|value|type|value ...
其中messagelength是4个字节,键入一个字节,值取决于类型,...
我正在尝试解决这种麻烦的方式。我被io,bufio,encoding淹没了...我找不到正确的开始位置,也找不到样本。寻找ReadInt32,ReadByte,....
接下来的事情-我需要汇编一个答复-> WriteInt32,WriteString,WriteByte等。
尝试将python转换为go,python代码使用struct.unpack / pack
您可以使用包encoding / binary。您唯一需要的功能是Read()和Write()。使用方法如下:
Read()函数具有以下签名:
func Read(r io.Reader, order ByteOrder, data interface{}) error
此功能r
按顺序从中读取ByteOrder
数据。data
必须是一个指向固定大小值的指针(例如int32
,一个字节或仅具有固定大小成员的结构)或此类值的切片。如果将指针传递给结构,则结构字段将在不填充的情况下被读入,空白字段(即名为_的字段)对应的数据将被读取并丢弃(填充的理想选择)。
对于您的特定问题,请声明一个与数据流的标头匹配的结构。
type Header struct {
Length uint32
Type uint8
}
消耗数据包的标头(假定为大端):
var hdr Header
if err = Read(connection, binary.BigEndian, &hdr); err != nil {
// deal with read error
}
切换类型字节:
switch hdr.Type {
// for each type, read into a type-specific struct
// ...
}
Write()
是相似的,但是写而不是读。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句