检查android中的套接字连接状态

时间:2013-12-05 13:16:49

标签: android sockets tcp android-asynctask

我正在使用每1秒运行一次的asyncTask。 在asyncTask启动之前,我必须每隔1秒检查套接字连接是否可用的条件。

我使用了socket.isConnected() - >它总是回归真实。

如何做到这一点。

请帮助..

3 个答案:

答案 0 :(得分:0)

它太晚了,但它可能会帮助别人你需要做的只是检查你的套接字,如果它不是null然后如果它不是null只是断开你的套接字,否则创建新套接字并连接

    if(socket != null)
    {
        socket.disconnect();
    }
    else
    {
        socket.createSocket();
        socket.connect();
    }

这里创建套接字是一种方法,您可以在其中创建套接字 希望它可以帮助别人。

答案 1 :(得分:0)

public class CheckSocket extends AsyncTask<String,String,String>{

    @Override
    protected String doInBackground(String... strings) {
        try {
            socket = new Socket("192.168.15.101", 23);
        } catch (IOException e) {
            e.printStackTrace();
        }

        if(socket.isConnected()){
            Log.d(TAG, "doInBackground: connected");
        }else {
            Log.d(TAG, "doInBackground: not connected");
        }
        return null;
    }
}

答案 2 :(得分:0)

一旦建立连接,isConnected() 将始终返回 true。

要检查连接是否仍然可用,您可以:

  1. 使用 socket.getInputStream().Read()。这将阻塞,直到某些数据到达或连接关闭,在这种情况下它将返回 -1。否则它将返回接收到的字节。如果您使用 socket.setSoTimeout(t) 然后调用 Read(),可能会发生 3 种情况:

    a) 连接关闭并Read() returns -1;

    b) 一些数据到达并Read() returns the read byte

    c) Read() 将阻塞 t 毫秒并抛出 SocketTimeoutException,这意味着没有收到数据并且连接正常。

  • 如果您想快速检查连接,请将超时设置为 1。如果您将其设置为 0,它将无限期地阻塞,这是默认设置。
  1. 使用socket.getInetAddress().isReachable(int timeout)