如何读取以字节为单位查找数据包的长度

时间:2015-01-07 17:58:00

标签: java sockets proxy packet

如何使用DataInputStream及其readUnsignedShort / readUnsignedByte方法查找数据包的长度。

数据包的标头是7个字节,如下所示:

TT TT SS SS SS VV

其中: TT是Type SS是大小 VV是版本

我需要找到数据包的大小,然后将它的HexBinary打印到标题中找到的给定字节。

我需要使用他的DataInputStream函数,但是如何。

谢谢!

2 个答案:

答案 0 :(得分:0)

如果是字节:

  • 使用readUnsignedShort()

  • 读取类型字段
  • 读取3字节长度字段和版本字段以及readInt(),并分别用移位和掩码将它们分开。

答案 1 :(得分:0)

阅读有关位移的文档:

Bitwise and Bit Shift Operators

例如,假设您显示的内容以字节表示:

int type = stream.readUnsignedShort();

int size = stream.readUnsignedShort();
size <<= 8;
size |= stream.readUnsignedByte();

int version = stream.readUnsignedByte();

可替换地:

int type = stream.readUnsignedShort();

int size = stream.readUnsignedByte();
size <<= 8;
size |= stream.readUnsignedByte();
size <<= 8;
size |= stream.readUnsignedByte();


int version = stream.readUnsignedByte();