现在有四个客户端跟服务器连接,现有发送文件的客户端发送给server,之后由server发送给另外四个客户端,可是现在发送的时候,如果不加入channel.socket().shutdownOutput(),那么接收方一直不会=-1,而我的想法是要保持那4个客户端与server相连接,不想断开他们;如果不加入,又判断不了数据的完整性,每次客户端read会分几个事件去读,请问怎么做?
跪谢
可以考虑先发送一个文件大小,比如用固定的头两个字节表示。
取到大小后,如果读取了等于文件大小的数据后,就停止接受,
是否关闭连接看你的处理逻辑
######但是现在是这样,不是我client没有读完这个channel数据,而是说server发送了文件给client,但是client接收的时候,由于是非阻塞的,分开了两次事件,两次isReadable() 事件了,怎么去拼接生成文件?还是说我流程有问题?我第一次只读了channel的所有数据,但是这个数据只是这个文件的一部分,剩下的再第二个isReadable中呢。######弄明白了,还是理解有误。
sever send 的时候,需要跟进一个文件大小的length,在channel.read的时候,如果想不断开,那么判断read>=0,然后判断size是否>=length,如果大于等于,那么break;如果小于,那么说明还没读完,继续读就可以,此时,一次性会读完所有数据,而不会分开两个isReadable()去读,如果发生传递一个文件,分开两个isReadable()读的话,那么说明你第一次没读干净,导致需要开启另外一个事件去读。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。