V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
wsdjeg
V2EX  ›  Java

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

  •  
  •   wsdjeg · 2016-11-21 01:10:15 +08:00 · 1989 次点击
    这是一个创建于 2729 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    sagaxu
        1
    sagaxu  
       2016-11-21 09:57:13 +08:00 via Android   ❤️ 1
    binbinyouliiii
        2
    binbinyouliiii  
       2016-11-21 10:19:00 +08:00   ❤️ 1
    英语水平不好,没仔细看,不知道你是字节流还是字符流,字符流的话,当读到 null 的时候,就直接跳出循环,字节流就是读到-1 的时候跳出, socket 有个 isCloseed 方法,是判断 socket 有没有关闭,不是判断 socket 都没有断开的
    wsdjeg
        3
    wsdjeg  
    OP
       2016-11-21 18:49:18 +08:00
    @sagaxu 这点我也考虑到,但是我不确定是不是只有连接中断时候才灰读到 null 。
    wsdjeg
        4
    wsdjeg  
    OP
       2016-11-21 18:50:14 +08:00
    @binbinyouliiii 那么是否有方法判断 socket 是否已断开的呢?
    sagaxu
        5
    sagaxu  
       2016-11-21 20:21:36 +08:00 via Android
    @wsdjeg JDK 文档写的很清楚,返回 null 就是对方关闭了 socket 的写入,或者干脆完全关闭了。只要返回 null 或者抛了 IOException ,你唯一能做的就是关闭连接并清理现场。
    sagaxu
        6
    sagaxu  
       2016-11-21 20:26:02 +08:00 via Android
    @wsdjeg 这种一般通过 heartbeat 实现,并没有其它可靠的办法判断。因为你读取和写入的通道,只不过是内核缓冲区,写入或者读取的方法正常返回,并不能保证连接还在。
    wsdjeg
        7
    wsdjeg  
    OP
       2016-11-21 20:36:35 +08:00
    @sagaxu 明白了,非常感谢
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2777 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 05:38 · PVG 13:38 · LAX 22:38 · JFK 01:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.