一个网络流收发程序,如何在程序中加入自动重连(到服务器)
就是当服务器断开了或者网线拔掉了,自动再重新连接上

解决方案 »

  1.   

    捕获异常,每过一定时间,再次连接server直至连上try{}catch(Exception e){
      Thread.sleep(1000);
      reconnect();
    }
      

  2.   

    我采用了上述方法,代码如下:try {
                //连接服务端
                new ConnectInfo().setConnectInfo();
                socket = new Socket(ConnectInfo.ip, ConnectInfo.port);
                //socket.close();            System.out.println(socket.isClosed());
                out = socket.getOutputStream();
                in = socket.getInputStream();
            } catch (UnknownHostException e) {
                System.out.print("Not find host!");        } catch (SocketException e) {
                try {
                    Thread.sleep(1000);
                    System.out.println("开始试图重连接");
                    login.reconnect(socket);
                } catch (InterruptedException e1) {
                    e1.printStackTrace();
                }
            } catch (IOException e) {
                System.out.print("不能获得Socket的读入于写出错!");    
               
            }public void reconnect(Socket socket) {
            try {
                socket = new Socket(ConnectInfo.ip, ConnectInfo.port);
            } catch (UnknownHostException e) {
                e.printStackTrace();                    } catch (SocketException e) {
                e.printStackTrace();            try {
                    Thread.sleep(1000);
                    System.out.println("开始试图重连接");
                    reconnect(socket);
                } catch (InterruptedException e1) {
                    e1.printStackTrace();
                }
                reconnect(socket);
            } catch (IOException e) {
                e.printStackTrace();
            }运行一段时间,拔掉网线,大概10秒钟,程序中止,显示SocketException :connect reset....
    请问我错在哪里,正确写法是什么?望指点迷津!!!!!
      

  3.   

    重连 Socket 后你的 InputStream , outputStream 也要跟着重新获取啊。Socket 断开就意味着上次的状态全都丢失了 , 发送接受的过程完全重来。
      

  4.   

    还有 reconnect () 中怎么只改变了 局部变量 socket ? 要么修改实例变量,要么返回一个 新 Socket 对象以供 重新获取 OutputStream/InputStream .