我正在使用每 1 秒运行一次的 asyncTask。 在 asyncTask 启动之前,我必须每 1 秒检查一次套接字连接是否可用的条件。
我使用了 socket.isConnected() -> 它总是返回 true。
如何做到这一点。
请帮忙..
一旦建立连接,isConnected() 将始终返回 true。
要检查连接是否仍然有效,您可以:
使用
socket.getInputStream().read()
。这将阻塞,直到一些数据到达或连接关闭,在这种情况下它将返回 -1
。否则它将返回接收到的字节。如果您使用 socket.setSoTimeout(t)
然后调用 rRead()
,可能会发生 3 件事:
a) 连接关闭并且
read()
返回 -1
;
b) 一些数据到达,并且
read()
返回读取的字节。
c)
read()
将阻塞 t
毫秒并抛出 SocketTimeoutException
,这意味着没有收到数据并且连接正常。
socket.getInetAddress().isReachable(int timeout)
。为时已晚,但它可能会帮助其他人,您所需要做的就是检查您的套接字是否为空,然后如果它不为空,则断开您的套接字,否则创建新套接字并连接它
if(socket != null)
{
socket.disconnect();
}
else
{
socket.createSocket();
socket.connect();
}
这里创建套接字是您可以创建套接字的方法 希望它可以帮助某人。
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;
}
}