连接中断后,socket并不为空。该如何判断和处理,也在思考中~

解决方案 »

  1.   

    没有办法知道Socket是否中断,原因是因为确实没有办法判断一个TCP连接是超时还是中断,所以使用TCP连接时,如需要判断是否中断,需要设计一套ping和pong的方法,Client Ping Server,然后Server 收到ping后pong client. 这样就可以确切知道TCP连接是否中断,然后你有两个选择,一、重新建一socket,上层的资源不去。二、close socket.
      

  2.   

    就是forqzy(forqzy) 说的!!!
      

  3.   

    创建一个向server读入的支撑流,向输出支撑流写信息操作后后,在flush()后增加一个从输入流读信息的语句,捕捉读入异常。如果连接中断,有一个socket close的异常抛出。
      

  4.   

    to RomandAccessFile(goodghost):
    服务器不是我们作的,它只接收信息,不给返回任何信息。没有各种心跳事件发生。
      

  5.   

    对clientSocket,有异常,如下:socket = new Socket(servIp,port) ;
    socket.setReceiveBufferSize(1024*100) ;
    System.out.println("connect successful:" + servIp);
    sout = new DataOutputStream( socket.getOutputStream() );
    sin = new DataInputStream( socket.getInputStream() );
    while (true) {
       try{
             byte[] mes_Head = new byte[MSGHEADLEN];
             sin.readFully(mes_Head,0,MSGHEADLEN);
       } catch( EOFException ie ) {
           // len_full("read eof:"+ie);
           // This doesn't need an error message
       } catch( Exception ie ) {
            System.out.println("connect disconnected:"+ie);
       } finally {
    }