当前位置: 代码迷 >> J2EE >> socket连接失败抛错误,希望继续执行
  详细解决方案

socket连接失败抛错误,希望继续执行

热度:102   发布时间:2016-04-22 00:32:30.0
socket连接失败抛异常,希望继续执行。
Java code
    @Override    public void run() {        while (!bExit ) {            try {                System.out.println("kaishile");                    send();                    System.out.println("开始了,开始了");                    Thread.sleep(15000);            } catch( InterruptedException e) {                e.printStackTrace();            }         }    }
,15秒执行一次send();
Java code
private void send() {        try {            if( client == null || client.isClosed()) {                client = new Socket(InetAddress.getByName(mServerAddr),mServerPort);                client.setSoTimeout(60000);                client.setTcpNoDelay(true);                outP = client.getOutputStream();                            inP = client.getInputStream();                        _log.debug("new socket is created, device id is " +  mDeviceID);                    }} catch (IOException e) {            System.out.println("报错了IOException");            e.printStackTrace();            _log.error("deviceID:" + mDeviceID + "  IOException ");            try {                outP.close();                inP.close();                client.close();                client = null;            } catch (IOException e1) {                e1.printStackTrace();            }        }
,我故意将地址写错,当创建socket失败时,就抛出报 错了IOException
java.net.ConnectException: Connection timed out: connect,这样就停止了,但是我想不管你是不是报错,我就15秒执行一次程序,现在是报错后直接挂掉了,程序不走了,希望大侠来看看。。。

------解决方案--------------------
暂时没看出什么大问题,不过:
你那么多的close(),居然不是写在finally里面?
你的client等变量,居然都是成员属性,而不是send()函数的局部变量?


------解决方案--------------------
这样?

Java code
class TestClient1 implements Runnable{    Socket client = null;    InetSocketAddress serverAddress = null;    boolean bExit = false;        public TestClient1(){        this("127.0.0.1", 7777);    }        public TestClient1(String serverIp, int port){                this.serverAddress = new InetSocketAddress(serverIp,port);    }        @Override    public void run() {        for(int i=0;!bExit;i++){            if(connect2Server()){                //连接成功            }else{                System.out.println("连接失败,重试("+i+")...");                try {                    Thread.sleep(1000*15);                } catch (InterruptedException e) {                                    }            }        }    }        boolean connect2Server(){        boolean done = false;                try{            client = new Socket();            client.connect(serverAddress, 1000*60);            client.setSoTimeout(60*1000);            done = client.isInputShutdown() & client.isOutputShutdown();        }catch(Exception ex){            System.err.println("报错了:"+ex.getMessage());            try{                if(null!=client) client.close();            }catch(Exception ex1){                            }                        done = false;        }                return done;    }}
  相关解决方案