所以 , 我们要么在发送方将数据转换成网络字节序(大端编码) , 要么在接收端再进行转换 。
下面看一下如果C++端传送一个如下数据结构 , Java端该如何解析(由于Java中是没有指针的 , 也无法操作内存地址 , 导致很多人无从下手) , 下面利用tcpdump来解决这个问题的思路 。
我们客户端发送的数据包:
文章插图
其结构体定义如下:
文章插图
利用tcpdump抓到的包如下:
文章插图
放大一点:
文章插图
我们白色标识出来就是我们收到的数据包 。这里我想说明两点:
- 如果我们知道发送端发送的字节流 , 再比照接收端收到的字节流 , 我们就能检测数据包的完整性 , 或者利用这个来排查一些问题;
- 对于Java程序只要按照这个顺序 , 先利用java.net.Socket的输出流java.io.DataOutputStream对象readByte、readInt32、readInt32、readBytes、readBytes方法依次读出一个char、int32、int32、16个字节的字节数组、63个字节数组即可 , 为了还原像int32这样的整形值 , 我们需要做一些小端编码向大端编码的转换 。
推荐阅读
- Linux常用的10个性能检测命令!
- MySQL服务器最近偶尔出现cpu居高不下的情况,如何排查?
- linux系统root密码忘记了怎么办
- Linux 防火墙入门教程
- app开发完成后为什么需要进行ios签名内测?
- 高并发服务器逻辑处理瓶颈,如何解决?
- 5分钟快速搭建FTP服务器的图文教程
- 苹果企业开发者账号卖多少钱
- 程序员和开发者,细品之下见差别
- 传统服务器与云服务器的对比