java接受C++通过socket传送过来的数据包,接收之后是个数组,怎么判断里面的内容?

数据包格式(所有数值为大端格式发送:|包总长(2B)|命令字(4B)|数据(不定长)|CRC32(4B)|接收:|包总长(2B)|数据(不定长)|CRC32(4B)|传送... 数据包格式(所有数值为大端格式

发送:| 包总长 (2B) | 命令字 (4B) | 数据 (不定长) | CRC32 (4B) |

接收:| 包总长 (2B) | 数据 (不定长) | CRC32 (4B) |
传送格式就是上面的这样的,
在我接收到C++传过来的数据之后,java服务端怎么把 (| 包总长 (2B) | 命令字 (4B) | 数据 )这三个部分 生成CRC32,然后和 C++传过来的CRC32进行验证?还有就是比如说发送过来的命令字是“abcd”,我怎么从传过来的数组中取出“abcd”,然后和java这边的“abcd”进行比较?
展开
 我来答
百度网友559f8d3
2014-03-28 · TA获得超过203个赞
知道小有建树答主
回答量:157
采纳率:0%
帮助的人:54.7万
展开全部
1)这个具体要看CRC的算法,你自己去找算法了解,可以容纳1BIT的错误翻转纠正。 这个事系统的协议栈可以直接就处理了,这些 校验和 因为和逻辑没有关系,所以封装在协议栈了,不过貌似有一些方法也可以绕过协议栈(这个太复杂了不说)。

2)传过来的不是数组,网络上到计算机的端口都是帧格式的网络数据,而且都是BIT流信息,你可以一次读取一段区域的BIT流,然后按照你的需求,一点一点的读取解开(这就是二层和三层的协议的作用了。)。
追问
传过来的是数组,我问过,写C++的那个同事了,他说直接用数组比较,我不会
追答
你们写C++的同事怎么这么给你说,他到底明不明白,SOCKET走的网络通信,网络中不是自己算计内存,只能序列化成为BIT流进行转发,就是一串01,你只能按照标准或者协议,截取一段长度的01,通过自己写或者其他什么方式反序列化成为一个内存中的对象。
然后比较!!!!
xwthswq
2014-03-28 · 超过16用户采纳过TA的回答
知道答主
回答量:63
采纳率:0%
帮助的人:44.1万
展开全部
C++数据格式不清楚,如果是到java这边了,肯定是字符串,剩下的就是用java代码将字符串里的特定字段取出来
循环数据,toString(),然后找出"abc" ,indexof就好.
追问
数据能接收到,就是怎么处理那些数据,传过来的数组,转换成字符串乱码,写C++的那个同事不用转化成字符串,直接用数组比较,我不知道怎么用数组比较,怎么截取数组中的内容?
追答
乱码是编码格式不正确吧.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wyhbb163
2014-03-28 · TA获得超过1498个赞
知道小有建树答主
回答量:286
采纳率:0%
帮助的人:160万
展开全部
socket传送的数据应该和语言无关吧
java从socket的instream读入数据就行了
追问
数据能接收到,就是怎么处理那些数据,传过来的数组,转换成字符串乱码,写C++的那个同事不用转化成字符串,直接用数组比较,我不知道怎么用数组比较,怎么截取数组中的内容?
追答
java的instream是byte类型吧,那你就8位8位比较呗
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式