默认

求助关于Mina框架文件传输时服务端解析数据出错的问题

查看数: 66870 | 评论数: 13 | 收藏 2
关灯 | 提示:支持键盘翻页<-左 右->
    组图打开中,请稍候......
发布时间: 2017-01-05 17:10

正文摘要:

因为服务器端是已经写好的,因还关联其他的项目代码不宜改动。现要写一个客户端向服务器端发送文件,但服务器端解析的时候要检查packet长度,总是报错。现在不知道问题是出在发送文件的方法有问题,还是传输的内容有 ...

评论

JackJiang 发表于 7 年前
引用:janesjardin 发表于 2017-01-19 15:15
嗯,思考了版主的提议并参考了这个帖子,这个问题就解决了  TCP传输下的困境—记在《Mina实现自定协议传 ...

Good job!
janesjardin 发表于 7 年前
引用:JackJiang 发表于 2017-01-19 11:44
你在sessionOpened里write?这很奇怪吧

嗯,思考了版主的提议并参考了这个帖子,这个问题就解决了  TCP传输下的困境—记在《Mina实现自定协议传输》之后
JackJiang 发表于 7 年前
引用:janesjardin 发表于 2017-01-19 10:48
问题已解决,因为没有对上服务端的接收数据格式。 但是现在新的问题是在sessionOpened循环调用session.writ ...

你在sessionOpened里write?这很奇怪吧
janesjardin 发表于 7 年前
问题已解决,因为没有对上服务端的接收数据格式。 但是现在新的问题是在sessionOpened循环调用session.write会丢失一些数据,就是没有触发messageSend发送不出去,丢失的数据是随机的。有没有遇到类似问题的朋友?
JackJiang 发表于 7 年前
引用:janesjardin 发表于 2017-01-18 17:23
这个就是pc项目啊,老项目没办法,现在来不及改

原来如此
janesjardin 发表于 7 年前
引用:一地鼻血 发表于 2017-01-08 11:49
用MINA传文件?都什么时代了,还用pc端时代的im实现方法

这个就是pc项目啊,老项目没办法,现在来不及改
415378223 发表于 7 年前
我在做任务啊啊啊啊啊 啊啊啊啊 啊
一地鼻血 发表于 7 年前
用MINA传文件?都什么时代了,还用pc端时代的im实现方法
JackJiang 发表于 7 年前
引用:janesjardin 发表于 2017-01-05 17:38
已经试过在encode里只传byte流,或在encode里没有代码只在opensession里传入文件byte,报错依然一样

最快的解决方法就是,找到官方最简单的TCP传输2进制数据的方法,运行看看会不会出错,不会出错就把读写byte的那段改成从你的文件里读取byte并发送到服务端由服务端保存。

你上面这一大堆代码也不知道哪复制来的,无法证明是否能用,建议从最简单的试起。
janesjardin 发表于 7 年前
引用:JackJiang 发表于 2017-01-05 17:27
我看你的代码很诡异,因为你说的只是需要客户端向服务端传文件,所以就是客户端的编码器跟服务端的解码器对 ...

已经试过在encode里只传byte流,或在encode里没有代码只在opensession里传入文件byte,报错依然一样
JackJiang 发表于 7 年前
引用:janesjardin 发表于 2017-01-05 17:23
新手小白,不是很懂。它为什么在这里要定义65535,IP数据包最大值限制长度

你文件传输用的肯定是TCP协议,对于应用层而言数据就是个“流”的概念,而且你处理的时候一定要把它作为最底层的byte处理,建议看下MINA的tcp传输数据的DEMO就知道了,传一个文件,就相当于持续传输一个很大的byte流而已,道理是一模一样的。
JackJiang 发表于 7 年前
我看你的代码很诡异,因为你说的只是需要客户端向服务端传文件,所以就是客户端的编码器跟服务端的解码器对上就行了。

但能看到你客户端的编码器里为何涉及到utf-8这种跟String内容有关的代码及操作,显然你两边只应该把所有数据内容作为byte来处理才合适(即传输时是无需理会具体内容,反正对于底层而言所有数据都是byte),写入文件时同样应该写入的是底层的byte。

你仔细检查一下代码。
janesjardin 发表于 7 年前
新手小白,不是很懂。它为什么在这里要定义65535,IP数据包最大值限制长度

返回顶部