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

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

相关方法如下:

[java]  view plain copy
  1. 方法一:  
  2.     try {  
  3.         socket.sendUrgentData(0xFF);  
  4.     } catch (IOException e) {  
  5.         //网络断开  
  6.         handleNetDisconnect();  
  7.         e.printStackTrace();  
  8.     }  

方法二:

[java]  view plain copy
  1. /** 
  2.      * 通过tcp发送信息 
  3.      * @param str 
  4.      */  
  5.     private boolean sendMsg(String str){  
  6.         boolean isConnect=false;  
  7.           
  8.         if(dos!=null)  
  9.         try {  
  10.             dos.write(str.getBytes("UTF-8"));  
  11.             dos.flush();  
  12.             isConnect=true;  
  13.         } catch (IOException e) {         
  14.             Log.e("tcpmsg""writeOutputStream fail");  
  15.             isConnect=false;  
  16.         }   
  17.           
  18.         return isConnect;  
  19.     }  

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

android中ping方法:

[java]  view plain copy
  1. private boolean startPing(String ip){   Log.e("Ping""startPing...");  
  2.         boolean success=false;  
  3.         Process p =null;  
  4.           
  5.          try {   
  6.                 p = Runtime.getRuntime().exec("ping -c 1 -i 0.2 -W 1 " +ip);   
  7.                 int status = p.waitFor();   
  8.                 if (status == 0) {   
  9.                     success=true;   
  10.                 } else {   
  11.                     success=false;    
  12.                 }   
  13.                 } catch (IOException e) {   
  14.                     success=false;     
  15.                 } catch (InterruptedException e) {   
  16.                     success=false;     
  17.                 }finally{  
  18.                     p.destroy();  
  19.                 }  
  20.                
  21.          return success;  
  22.     }  

其中 -c 1为发送的次数,1为表示发送1次,-w 表示发送后等待响应的时间。
通过以上代码可以实现对某个ip的测试,测试时需要使用真机。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值