有个Java 项目,通过Socket Tcp长连接通信方式向服务器发送消息。 100
消息由消息头和消息体组成,消息头采用结构体格式,消息头TotalLength2UnsignedInteger消息总长度(含消息头及消息体)MessageType2Unsi...
消息由消息头和消息体组成,消息头采用结构体格式,
消息头
TotalLength 2 Unsigned Integer 消息总长度(含消息头及消息体)
MessageType 2 Unsigned Integer 消息类型 0x0004
SequenceId 4 Unsigned Integer 交互的流水号,顺序累加,步长为1
消息体
Reason 1 Unsigned Integer 连接释放的原因,各个值代表意义如下:
1: 用户正常释放。
2: 数据类型错误。
3: 超出机器处理能力。
问:客户端请求时的数据格式怎么封装? 展开
消息头
TotalLength 2 Unsigned Integer 消息总长度(含消息头及消息体)
MessageType 2 Unsigned Integer 消息类型 0x0004
SequenceId 4 Unsigned Integer 交互的流水号,顺序累加,步长为1
消息体
Reason 1 Unsigned Integer 连接释放的原因,各个值代表意义如下:
1: 用户正常释放。
2: 数据类型错误。
3: 超出机器处理能力。
问:客户端请求时的数据格式怎么封装? 展开
2个回答
展开全部
你这消息头、消息体的结构格式都定下来了,总长度就是固定的啊?消息体的长度不是一共2+2+4+1=9个字节么?消息格式肯定要按照服务端的要求进行发送,明显服务端不是java的程序。。但是java里是没有Unsigned Integer这种数据类型的(java的stream操作里提供了一些unsigned的方法,或者自己写方法来生成对应的字节格式),你可以按照他的要求,使用字节数组封装好,然后发送。
针对这个示例消息,你可以:
创建一个长度为9的字节数组。把“9”变成byte放入前两个字节(前两个字节数据应该为:0x00, 0x09。这是第一个字段,长度),后面的字段数据以此类推。一个字段一个字段处理成服务器要求的格式。
然后把字节流发送给服务端。
针对这个示例消息,你可以:
创建一个长度为9的字节数组。把“9”变成byte放入前两个字节(前两个字节数据应该为:0x00, 0x09。这是第一个字段,长度),后面的字段数据以此类推。一个字段一个字段处理成服务器要求的格式。
然后把字节流发送给服务端。
追问
嗯,给个例子吧
展开全部
问服务端要样例。
追问
TotalLength 是怎么算的?
请求格式我直接拼装为字符串 80x000411 可以吗, 然后转换为字节数组发送
追答
消息总长度(含消息头及消息体)
我的理解是:TotalLength获取你传输的字符串长度。
TotalLength包含了他自身的长度,TotalLength的结果会影响TotalLength自身的值,我觉得这样设计是有问题的。
最好还是让对端提供样例。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询