我正在使用每1秒运行一次的asyncTask。 在asyncTask启动之前,我必须每隔1秒检查套接字连接是否可用的条件。
我使用了socket.isConnected() - >它总是回归真实。
如何做到这一点。
请帮助..
答案 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。
要检查连接是否仍然可用,您可以:
使用 socket.getInputStream().Read()
。这将阻塞,直到某些数据到达或连接关闭,在这种情况下它将返回 -1
。否则它将返回接收到的字节。如果您使用 socket.setSoTimeout(t)
然后调用 Read()
,可能会发生 3 种情况:
a) 连接关闭并Read() returns -1
;
b) 一些数据到达并Read() returns the read byte
。
c) Read()
将阻塞 t
毫秒并抛出 SocketTimeoutException
,这意味着没有收到数据并且连接正常。
socket.getInetAddress().isReachable(int timeout)
。