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

相关方法如下:

 

方法一:try {socket.sendUrgentData(0xFF);} catch (IOException e) {//网络断开handleNetDisconnect();e.printStackTrace();}


方法二:

 

 

/** * 通过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方法:

 

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的测试,测试时需要使用真机。

更多相关文章

  1. Android webkit webkit中skia的使用方法简析
  2. Android 学习记录-网络请求
  3. Android读写文件正确实行方法介绍
  4. Android实现给TableLayou绘制边框的方法
  5. android中textview字数过长解决方法
  6. 关于Android横竖屏切换的解决方法
  7. Android之Http网络编程(一)
  8. Android官方开发文档Training系列课程中文版:连接无线设备之网络

随机推荐

  1. Android使用Linux mount获取SdCard存储目
  2. Android(安卓)10 获取剪切板内容
  3. Android(安卓)cannot access localhost?
  4. Android的深層之美
  5. Android Framework分析 ---- 1消息处理机
  6. android -- FileObserver 类用法及限制
  7. location of android sdk has not been s
  8. linux和windows平台下下载android sdk的
  9. You need to use a Theme.AppCompat them
  10. Android.mk编译脚本 & AndroidManifest.x