1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > java 解析数据包_java - 如何在Java中正确解析TCP数据包? - 堆栈内存溢出

java 解析数据包_java - 如何在Java中正确解析TCP数据包? - 堆栈内存溢出

时间:2024-06-25 05:56:00

相关推荐

java 解析数据包_java - 如何在Java中正确解析TCP数据包? - 堆栈内存溢出

我目前有一个简单的TCP服务器,该服务器调用一个函数,并在每个新的传入数据包上以字节数组的形式将二进制TCP有效负载传递给它,解析它的正确方法是什么?

我试图通过将其切成不同的字节数组并分别进行处理来尝试执行此操作,但是我的数据包中包含一个可变长度的数据类型,无法将其与其他数据分开。 看来这不是我应该做的,而且我认为有更好的方法来做

readVarInt()是一个函数,用于分析可变长度数据类型并返回结果,并且未解析的数据类型的长度在int []数组中。PacketHeader是一个具有大小,id和主体字段,id和大小已被解析的类。并且body字段包含大小和id字节之后的所有其他内容

int[] parsedProtocolVersion = Main.readVarInt(packetHeader.body);

System.out.println(parsedProtocolVersion[0] + ' ' + parsedProtocolVersion[1]);

int[] parsedServerAddressSize = Main.readVarInt( packetHeader.body.subList(parsedProtocolVersion[1], packetHeader.body.size()));

System.out.println("parsed 1 " + parsedServerAddressSize[1] + " " + parsedServerAddressSize[0]);

String parsedServerAddress = String.valueOf(packetHeader.body.subList(parsedServerAddressSize[1], parsedServerAddressSize[0]));

System.out.println("parsed 2");

int parsedServerPort = Integer.parseUnsignedInt((packetHeader.body.subList(parsedServerAddressSize[1]+parsedProtocolVersion[1], parsedServerAddressSize[1]+parsedProtocolVersion[1]+2).toString()));

System.out.println("parsed 3");

int[] parsedNextState = Main.readVarInt(packetHeader.body.subList(parsedServerAddressSize[1]+parsedProtocolVersion[1]+2, packetHeader.body.size()));

System.out.println("parsed 4");

return String.format("%d %s %d %d",parsedProtocolVersion[0], parsedServerAddress, parsedServerPort, parsedNextState[0]);

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。