Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何读取和查找数据包的长度(以字节为单位)_Java_Sockets_Proxy_Packet - Fatal编程技术网

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

Java 如何读取和查找数据包的长度(以字节为单位),java,sockets,proxy,packet,Java,Sockets,Proxy,Packet,如何使用DataInputStream及其readUnsignedShort/readUnsignedByte方法查找数据包的长度 数据包的头是7个字节,如下所示: TT SS VV 其中: TT型 SS是尺寸 VV是版本 我需要找到数据包的大小,然后打印它的十六进制二进制文件,直到在报头中找到的给定字节 我需要使用DataInputStream函数来实现这一点,但如何实现 谢谢大家! 如果这些是字节: 使用readUnsignedShort() 将3字节长度字段和版本字段与readInt()

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

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

TT SS VV

其中: TT型 SS是尺寸 VV是版本

我需要找到数据包的大小,然后打印它的十六进制二进制文件,直到在报头中找到的给定字节

我需要使用DataInputStream函数来实现这一点,但如何实现

谢谢大家!

如果这些是字节:

  • 使用
    readUnsignedShort()

  • 将3字节长度字段和版本字段与
    readInt()
    一起读取,并分别用移位和掩码将它们分开


阅读有关位移位的文档:

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

int type = stream.readUnsignedShort();

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

int version = stream.readUnsignedByte();
int type=stream.readUnsignedShort();
int size=stream.readUnsignedShort();

大小如何读取它们,然后移动它们?有没有更快捷的方法来确定尺寸?分别用移位和蒙版。右移8以获得长度;使用0xff屏蔽以获取版本。有什么问题吗?为什么你认为你需要一个更快的方法呢?嗯,我不明白这意味着什么,也不知道怎么做:你有没有一个例子?我会做一些类似的事情吗:
stuff=socket.readUnsignedInt()
?你不明白“向右移位”或“掩码”的哪一部分?这是非常基本的。所有这些。。我可能可以用谷歌搜索如何做到这一点,但首先我该如何得到这些东西?谢谢-我回家后会测试它。我认为它不起作用,因为我得到的东西非常大。。。1283112您是否遗漏了掩蔽0xff?不。它更可能是endian问题。尝试交换最终整数中字节的顺序。我发现奇怪的是,数据以一个3字节的数字开始(假设这个数字是以字节编码的——你还没有对此发表评论)。是的,它是以字节的形式。让类型和尺寸正常工作。但版本显示为0:您可以忽略完整数据和大小为0的事实。现在可以了,但版本仍然是0。
int type = stream.readUnsignedShort();

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


int version = stream.readUnsignedByte();