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

检查android中的套接字连接状态,android,sockets,tcp,android-asynctask,Android,Sockets,Tcp,Android Asynctask,我正在使用每1秒运行一次的asyncTask。 在asyncTask开始之前,我必须每1秒检查一次套接字连接是否可用的条件 我使用socket.isConnected->它总是返回true 如何做到这一点 请帮助..太晚了,但它可能会帮助其他人。您需要做的只是检查您的套接字是否为空,如果为空,则断开套接字连接,否则创建新套接字并连接该套接字 if(socket != null) { socket.disconnect(); } else {

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

我使用socket.isConnected->它总是返回true

如何做到这一点


请帮助..

太晚了,但它可能会帮助其他人。您需要做的只是检查您的套接字是否为空,如果为空,则断开套接字连接,否则创建新套接字并连接该套接字

    if(socket != null)
    {
        socket.disconnect();
    }
    else
    {
        socket.createSocket();
        socket.connect();
    }
createsocket是一种创建套接字的方法
希望它能帮助某人。

一旦建立了连接,isConnected将始终返回true

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;
    }
}
要检查连接是否仍然可用,您可以:

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

a连接关闭,读取返回-1

b一些数据到达,Read返回读取字节

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

如果要快速检查连接,请将超时设置为1。如果将其设置为0,它将无限期阻塞,这是默认设置。 使用socket.getInetAddress.isReachableint超时。
“used socket.isConnected->it always returning true”-则虚拟TCP连接的结束处于已连接状态。我怀疑这不是您想要的-您想知道远程对等机是否可以访问。找到答案的唯一方法是尝试与它通信。“我必须每1秒检查一次套接字连接可用的条件”-不是真的,不是。您必须设计系统,使其能够适应通信故障。即使您实施了应用程序级轮询,这是“早期”检测不可访问性的常用方法,但在某些仍然可行的链路上,1秒超时也会失败-卫星和无线链路的延迟是出了名的。感谢您的回复,您必须设计您的系统,使其能够适应通信故障。如何知道套接字连接何时断开。?您将知道发送或接收何时失败。如上所述,如果您可以在没有其他内容可发送/接收的情况下对对等方执行一些应用程序级别的轮询,那么您可以更快地实现这一点。请允许我请求您在您的答案周围添加更多上下文。只有代码的答案很难理解。如果你能在你的文章中添加更多的信息,这将有助于询问者和未来的读者。另见。