检查android中的socket连接状态

问题描述 投票:0回答:3

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

我使用了 socket.isConnected() -> 它总是返回 true。

如何做到这一点。

请帮忙..

android sockets tcp android-asynctask
3个回答
1
投票

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

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

  1. 使用

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

    a) 连接关闭并且

    read()
    返回
    -1
    ;

    b) 一些数据到达,并且

    read()
    返回读取的字节。

    c)

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

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

0
投票

为时已晚,但它可能会帮助其他人,您所需要做的就是检查您的套接字是否为空,然后如果它不为空,则断开您的套接字,否则创建新套接字并连接它

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

这里创建套接字是您可以创建套接字的方法 希望它可以帮助某人。


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;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.