可以用异常捕捉来判断try
{
}
catch()
{
}

解决方案 »

  1.   

    问题是成功建立长连接之后,服务器端突然断掉的话客户端似乎判断不出?
    p_socket = new Socket(SERVER_HOST,SERVER_PORT);
    p_sockOut = new PrintWriter(new BufferedWriter(new OutputStreamWriter(p_socket.getOutputStream())),true);在建立连接并打开输出流成功之后,如果一段时间之后服务器端程序down掉了的话,用p_socket.isClosed()无法检查到服务器端已经不可用,而p_sockOut.println(str)则根本不会抛出任何异常,怎么办?
      

  2.   

    在建立连接并打开输出流成功之后,如果一段时间之后服务器端程序down掉了的话,用p_socket.isClosed()无法检查到服务器端已经不可用
    -----------------------------------------
    is that so?
      

  3.   

    我现在也被这东西给弄得头疼……我做的可以说是用到了所有能用的东西了,还是测不出来,我是这么做的: 
    Socket client=server.accept();
    ……
    if(client.isClosed)……
      

  4.   

    to  yangxile(yangxile):我试过了,定时发送检测包,但是过了30多秒后,才抛出读异常,(因为,读是阻塞的)
      

  5.   

    这个好象实现不了呀,因为如果你去判断的时候,你不知道到底是网络不通还是服务器down了
      

  6.   

    service端readLine()如果返回null,socket就没用了。书上是这么说的啊。
      

  7.   

    不要管是谁先断线(S/C)如果Server要先断线,它就发一条信息告诉Client,它要断了,然后在5秒后断开,而client接到信息后可以马上断开(当然它在服务器断开前结束,我预留了5秒给它)。而如是client断开,就更加好办了,client向server发出信息请求断开,server kill 为它该客户服务的线程,并且发信息给client,然后 client就System.exit(0);
      

  8.   

    加上setSoTimeout,这样如果在发出握手请求一定时间后还没有得到响应的话,则认为连接已经断开了。