netty推送后,手机端收到的数据不正确

Aberic 发布于 2014/11/21 17:23
阅读 1K+
收藏 0

在服务器上使用的是netty,在android客户端上我使用的就是普通的socket

通过客户端给服务器发送心跳并保持长连接,这点没问题,每次服务器返回的心跳应答协议也都正确,可以正常解包解析。

但是通过服务器主动推送的时候,客户端收到的协议就乱七八糟的,协议是自定义好的包头包尾和内容。

我在服务端使用的方法是存储当前连接的上下文——ChannelHandlerContext ctx对象,该方式在推送的时候是能精准到指定客户端的,就是write和flush之后,发出的数据不正确了。

第一次使用netty做长连接,请问是不是android客户端也必须使用netty才行?如果是这样的话,为什么服务器返回的心跳应答协议又没有问题。为什么主动推送的协议,我收到的不是按照自己定义的协议发送的内容?

加载中
0
筱龙缘
筱龙缘
编码对了么
0
Aberic
Aberic

引用来自“筱龙缘”的评论

编码对了么
因为生成协议的包都定义好了,所以编码是不会出问题的
0
筱龙缘
筱龙缘
编码是编码 与协议无关  socket发过去就是字节流而已 不同编码区解析 产生结果不一样
0
Aberic
Aberic

引用来自“筱龙缘”的评论

编码是编码 与协议无关  socket发过去就是字节流而已 不同编码区解析 产生结果不一样
在制定协议的时候,对传入的内容都统一用 UTF-16LE,在解包的时候也一样
筱龙缘
筱龙缘
贴点东西
筱龙缘
筱龙缘
你在android客户端解码的时候也是用的这个编码?
0
AidenZhang
AidenZhang

”请问是不是android客户端也必须使用netty才行?“

答:这个不是必须的,大家走的都是TCP协议,与上层用什么网络工具包无关;如果你的android这块是用C++写的,难道也用Netty么?

协议是自定义好的包头包尾和内容"

答:TCP是字节流,会有粘包问题(可以看Netty官方),你的协议是怎么定义的?有没有抓包看自己的协议是否正确?

0
hibegin
hibegin
不一定用 netty ,客户端用nio 处理数据粘包就行了。感觉应该发生粘包了。
0
朱宏青
朱宏青
解析有问题吧 估计是粘包问题 看官网吧
0
ChangeZ
ChangeZ
服务器返回的心跳应答协议和服务器主动推送,是同一个入口到客户端的吗??如果心跳没有问题那么服务器主动推送也不应该有问题。看一下长度标记是否正常吧,长度是否包含长度字段本身所占用的字节数呢。客户端解析的时候又是怎样的呢?实在不行就用心跳应答做服务端主动推送给客户端看看有无问题。如果没问题那就是你主动推送的协议有问题。
ChangeZ
ChangeZ
回复 @Aberic : 找到问题之后说一下是什么原因。
Aberic
Aberic
心跳应答无问题,是同一个入口,服务器保存有通道上下文。协议也没问题,用推送内容做心跳包应答的时候可以正常解析
0
ChangeZ
ChangeZ
粘包的话,是不是客户解包的代码有问题呢?
0
Mars_UU
Mars_UU
保证客户端解码的编码格式,保证没有粘包,或不完整包
返回顶部
顶部