您的位置:首页 > 理论基础 > 计算机网络

android(java) socket判断网络连接状态

2015-03-25 17:23 155 查看
在 android socket 编程中我们需要时刻对其网络状态进行判断,android(java)对网络状态判断的方法(isClosed(),isConnected(),isInputShutdown(),sOutputShutdown())中,并没有有效方法,这些都是判断本地socket端的状态的,如果要判断远端的socket状态,则可通过隔段时间向对方发送数据,如果发送过程出现异常,则证明网络出现问题。

相关方法如下:

[java] view
plaincopy

方法一:

try {

socket.sendUrgentData(0xFF);

} catch (IOException e) {

//网络断开

handleNetDisconnect();

e.printStackTrace();

}

方法二:

[java] view
plaincopy

/**

* 通过tcp发送信息

* @param str

*/

private boolean sendMsg(String str){

boolean isConnect=false;

if(dos!=null)

try {

dos.write(str.getBytes("UTF-8"));

dos.flush();

isConnect=true;

} catch (IOException e) {

Log.e("tcpmsg", "writeOutputStream fail");

isConnect=false;

}

return isConnect;

}

以上两种方法貌似还可以使用,但是有种情况也是无效的,例如:对方单方向断网(拔掉网线)。这种情况下就需要其他方法判断了,我们可以使用类似于windows下的Ping命令,来使用Linux下的ping命令,这是目前最有效的网络状态判定,也是比较准确的方法。

android中ping方法:

[java] view
plaincopy

private boolean startPing(String ip){ Log.e("Ping", "startPing...");

boolean success=false;

Process p =null;

try {

p = Runtime.getRuntime().exec("ping -c 1 -i 0.2 -W 1 " +ip);

int status = p.waitFor();

if (status == 0) {

success=true;

} else {

success=false;

}

} catch (IOException e) {

success=false;

} catch (InterruptedException e) {

success=false;

}finally{

p.destroy();

}

return success;

}

其中 -c 1为发送的次数,1为表示发送1次,-w 表示发送后等待响应的时间。

通过以上代码可以实现对某个ip的测试,测试时需要使用真机。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: