Jave socket 问题,请 V2 java 大神帮帮忙呀,非常感谢!

2016-11-21 01:10:15 +08:00
 wsdjeg

https://github.com/wsdjeg/Chatting/issues/3

主要问题就是, socket 链接的一端被ctrl + c 强制关闭后, socket 没有 close ,另外一端一只无线循环。

2002 次点击
所在节点    Java
7 条回复
sagaxu
2016-11-21 09:57:13 +08:00
binbinyouliiii
2016-11-21 10:19:00 +08:00
英语水平不好,没仔细看,不知道你是字节流还是字符流,字符流的话,当读到 null 的时候,就直接跳出循环,字节流就是读到-1 的时候跳出, socket 有个 isCloseed 方法,是判断 socket 有没有关闭,不是判断 socket 都没有断开的
wsdjeg
2016-11-21 18:49:18 +08:00
@sagaxu 这点我也考虑到,但是我不确定是不是只有连接中断时候才灰读到 null 。
wsdjeg
2016-11-21 18:50:14 +08:00
@binbinyouliiii 那么是否有方法判断 socket 是否已断开的呢?
sagaxu
2016-11-21 20:21:36 +08:00
@wsdjeg JDK 文档写的很清楚,返回 null 就是对方关闭了 socket 的写入,或者干脆完全关闭了。只要返回 null 或者抛了 IOException ,你唯一能做的就是关闭连接并清理现场。
sagaxu
2016-11-21 20:26:02 +08:00
@wsdjeg 这种一般通过 heartbeat 实现,并没有其它可靠的办法判断。因为你读取和写入的通道,只不过是内核缓冲区,写入或者读取的方法正常返回,并不能保证连接还在。
wsdjeg
2016-11-21 20:36:35 +08:00
@sagaxu 明白了,非常感谢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/321960

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX