`
szgaea
  • 浏览: 213570 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

犯了一个傻子错误

阅读更多
  这两天在写一个NIO的操作实例,写完测试,客户端发送一个数据到服务端,服务端进行读取,测试的时候发现服务器读取数据以后,一直还在尝试读,而且没有读到任何东西,我觉得这个太奇怪了,才了很多资料都没有找到相应的内容,通过两天的测试,最后发现,原来我的客户端的通道没有执行关闭的动作,而是直接退出了应用,服务端则一直没有收到这个通道流结束的标志,所以一直在尝试读取,但一直取不到数据,则通道也不会结束。希望这个对有碰到我这种情况的“代友”一点小提示。


http://www.meilijiankang.com有你所想,有你所要!
分享到:
评论
5 楼 szgaea 2009-06-19  
今天又进行了测试,是由于客户端关闭,但是这个通道在服务端并没有结束,则下次进行select的时候,还会读取到key,真正执行读数据操作的时候会异常,解决的办法是,catch异常,执行key的cancel操作。



美丽健康网http://www.meilijiankang.com
4 楼 Saito 2009-06-18  
  类似于狗嘴里有跟骨头。 你硬要从它嘴里拿出来。

  其结果可想而知。

 

  我猜想的。。 =v=
3 楼 szgaea 2009-06-18  
测试又发现,如果我在服务端channel注册了一个key,即使在循环里面进行了移除,但并没有做实际的操作,服务端一直对这个key进行处理,看似并没有做移除操作,好奇怪,这是什么原理呀?
2 楼 fjlyxx 2009-06-18  
异常的处理和 长短连接的选择。。最好设置下超时时间  服务端在N秒内没有读取到数据直接关闭。
1 楼 Saito 2009-06-18  
  Code Complete II 上看到的。 

  代码都是成对出现的。 写open()。 。不管open之后是啥。 先写个close()占住位置再说。。

相关推荐

Global site tag (gtag.js) - Google Analytics