检测连接是否失败 - Java Android

时间:2013-06-19 09:21:24

标签: java android sockets

如何检查服务器是在线还是离线,如果是脱机,则开始连接,直到服务器开启。我试过这个:

        connectBtn.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            new Thread(rConnection).start();

        }
    });

   public Runnable rConnection = new Runnable() {

    @Override
    public void run() { 
        boolean status = connect();         
        while (!status)
        {
            System.out.println("Connection Status: " + status);
            status = Connect();
        }
    }
 };

public boolean Connect() {

        boolean status = false;

        try {
            s = new Socket(SERVER_ADDRESS, TCP_SERVER_PORT);

            System.out.println("Socket: " + s.toString());

            if (s.toString() != "")
            {
                status = true;
            }
        } catch (UnknownHostException e) {
            e.printStackTrace();
            status = false;
            s=null;
        } catch (IOException e) {
            e.printStackTrace();
            status = false;
            s=null;
        } catch (NullPointerException e)
        {
            e.printStackTrace();
            status = false;
            s=null;
        }

        return status;
    }

如果服务器在启动应用程序之前正在运行它已成功连接但是如果服务器关闭或在一段时间后断开连接我没有收到任何错误消息,它将不会再次开始重新连接。怎么解决这个问题?

3 个答案:

答案 0 :(得分:1)

基本上你可以分开这个:

s = new Socket(SERVER_ADDRESS, TCP_SERVER_PORT);

s = new Socket();
s.connect(remoteAddr,timeout)

然后控制连接是否在超时或成功连接时返回。

答案 1 :(得分:0)

请查看此主题以获取解决方案和关键字:How can I monitor the network connection status in Android?。另外,如果底层连接丢失(或超时),请考虑在新连接上重试请求。

答案 2 :(得分:0)

  

如何检查服务器是在线还是离线,如果是离线,则开始连接,直到服务器开启

尝试在需要连接时连接到它,并处理导致的故障。目前,你似乎在试图保持永恒的联系,这种联系永远不会奏效。检测资源是否可用的最佳方法是尝试在需要使用资源时使用它。任何事情都会受到许多错误的影响,例如时间窗口问题,测试错误的东西,在错误的时间测试正确的东西,以及最好过度使用稀缺的资源。重新考虑你的要求。