android ip冲突检测工具,android ping ip 来检测连接是否正常
起因
設備的運行環境原因,網絡時不時的斷開,tcp的連接使用別人的服務,沒有心跳包來監聽是否斷開。
public void run() {
while (isRunning) {
byte[] btAryBuffer = new byte[1024];
try {
int nLenRead = DealWidth.this.in.read(btAryBuffer);
if (nLenRead > 0) {
byte[] btAryReceiveData = new byte[nLenRead];
System.arraycopy(btAryBuffer, 0, btAryReceiveData, 0, nLenRead);
for (ConnectState item : mState) {
item.message(btAryReceiveData);
}
DealWidth.this.mPackageParser.runReceiveDataCallback(btAryReceiveData,
DealWidth.this.mPackageProcess);
}
} catch (IOException e) {
judgment("IOException Process 斷開連接");
} catch (Exception e) {
e.printStackTrace();
judgment("Exception Process 斷開連接");
}
}
}
in.read(byte[] bytes):方式是阻塞的,有數據觸發往下走。物理連接斷開的時候,能收到 IO異常。但是數據鏈路層斷開了(ping ip 返回 1 ),這里是不匯報異常的(具體原因也不知道,可能是底層)。
通過ping ip 來監聽網絡是否斷開
public class PingIpThread implements Runnable {
private static final String TAG = PingIpThread.class.getSimpleName();
private boolean isRunning = true;
private String pingIp = "www.baidu.com";
private int timeOut = 3;
public void setRunning(boolean running) {
isRunning = running;
}
public void setPingIp(String pingIp) {
this.pingIp = pingIp;
}
public void setTimeOut(int timeOut) {
this.timeOut = timeOut;
}
@Override
public void run() {
Runtime runtime = Runtime.getRuntime();
while (isRunning) {
try {
//ping -c 3 -w 100 中,-c 是指ping的次數 3是指ping 3次 ,-w 100 以秒為單位指定超時間隔,是指超時時間為100秒
Process p = runtime.exec("ping -c 3 -w " + timeOut + " " + pingIp);
int ret = p.waitFor();
Log.d(TAG, "" + ret);
if (ret == 0) {
//成功
} else {
//ping ip 失敗,可能為 1 或者 2
}
} catch (Exception e) {
e.printStackTrace();
Log.d(TAG, "Exception:" + e.getMessage());
}
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
Log.d(TAG, "運行了");
}
}
}
最好是有心跳包來檢測是否斷開。(我這里暫時不支持)
通過間隔的ping tcp連接的ip ,來判斷連接是否終端。
總結
以上是生活随笔為你收集整理的android ip冲突检测工具,android ping ip 来检测连接是否正常的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: html5制作当当图书榜页面,当当图书.
- 下一篇: Grad-CAM在语义分割中的pytor