Android开发中网络相关的检测包括网络是否正常连接和网络已连接但是否可以正常访问两类。

(1)其中最常用的就是网络连接是否正常的检测,具体的代码如下:ConnectivityManager connManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);

// 获取代表联网状态的NetWorkInfo对象

NetworkInfo networkInfo = connManager.getActiveNetworkInfo();

if (networkInfo == null) {

return false;

}

boolean available = networkInfo.isAvailable();

if (available) {

Logs.i(TAG, "当前的网络连接可用");

} else {

Logs.i(TAG, "当前的网络连接不可用");

}

return available ;

(2)对于网络已连接,但是需要判断是否可以正常访问的问题,其实我们可以使用ping的方式进行检测,经过查阅网上的资料,发现好多使用 Process process=Runtime.getRuntime().exec("/system/bin/ping -c 4 "+"www.baidu.com") 进行检测的,经过测试发现会抛IOException异常,提示相关目录也就是/system/bin/ping 这个找不见,主要原因是系统没有root,所以无法访问系统目录。因此这种方式肯定不是我们想要的,那么我们该如何实现呢?其实不要慌,我们可以采用如下这种方式就可以实现我们想要的效果

Process process=Runtime.getRuntime().exec("ping -c 1 -w 1 " + "www.baidu.com");

具体的知识及实现可参考如下:

Ping是Windows、Unix和Linux系统下的一个命令。ping也属于一个通信协议,是TCP/IP协议的一部分。利用“ping”命令可以检查网络是否连通,可以很好地帮助我们分析和判定网络故障

Ping发送一个ICMP(Internet Control Messages Protocol)即因特网信报控制协议,回声请求消息给目的地并报告是否收到所希望的ICMP echo (ICMP回声应答),用来检查网络是否通畅或者网络连接速度的命令。广义来说即发送一个数据包,根据返回的数据包得到丢包率及平均时间得出网络的连接状态。

ping命令可以用在android中检测网络ip或者socket的连接,命令格式:ping ip地址(最简)

ping具有一些参数,可以具体定义包的个数、包的最大存活时间等

-c 发送ICMP包的个数

-i 每次发送数据包中间的间隔时间,单位秒

-l  设置在送出要求信息之前,先行发出的数据包

-s 设置数据包的大小

-t 设置TTL(存活数值)的大小 / TTL : Time to Live该字段指定IP包被路由器丢弃之前允许通过的最大网段数量

-w deadline 数据包存活最大时间

-W timeout等待每个响应的最长时间,单位为秒

android ping检测ip地址或socket地址可使用两种方式:

一种是使用Runtime.getRuntime().exec()执行ping命令,根据方法返回值process是否连通判断连接状态

process 的 waitFor() 方法源码中的解释:/**

* Causes the calling thread to wait for the native process associated with

* this object to finish executing.

*

* @return the exit value of the native process being waited on.

* @throws InterruptedException

* if the calling thread is interrupted.

*/

public abstract int waitFor() throws InterruptedException;

必要的情况下,此方法会使当前线程一直处于阻塞状态直到此执行进程从结果上表现出终止。此方法会在子进程被终止的时候立即返回值。如果子进程没有被终止,则当前线程一直阻塞到子进程退出。

return:一般来说 0 表示正常停止,即正常完成,未出现异常情况。1 表示网络已连接,但是无法访问,2 表示网络未连接。

示例:Process p = Runtime.getRuntime().exec("ping -c 1 -w 1 " + ipString);

// 读取ping的内容,可不加

InputStream input = p.getInputStream();

BufferedReader in = new BufferedReader(new InputStreamReader(input));

StringBuffer stringBuffer = new StringBuffer();

String content = "";

while ((content = in.readLine()) != null) {

stringBuffer.append(content);

}

// PING的状态

int status = p.waitFor();

if (status == 0) {

sleep(3000);

} else {

isEnable = false;

ExDispatcher.dispatchMessage(ExMessage.PING_CONNECT_BREAK);

interrupt();

}

另一种使用ping命令中发包及包的丢失率判断通信的连接状态Process process = Runtime.getRuntime().exec("ping "+address);

InputStreamReader r = new InputStreamReader(process.getInputStream());

LineNumberReader returnData = new LineNumberReader(r);

String returnMsg="";

String line = "";

while ((line = returnData.readLine()) != null) {

System.out.println(line);

returnMsg += line;

}

if(returnMsg.indexOf("100% loss")!=-1){

System.out.println("与 " +address +" 连接不畅通.");

} else{

System.out.println("与 " +address +" 连接畅通.");

}

正常的ping检测结果一般为:

====receive====:PING 192.168.43.159 (192.168.43.159) 56(84) bytes of data.

====receive====:64 bytes from 192.168.43.159: icmp_seq=1 ttl=64 time=73.8 ms

====receive====:64 bytes from 192.168.43.159: icmp_seq=2 ttl=64 time=91.4 ms

====receive====:64 bytes from 192.168.43.159: icmp_seq=3 ttl=64 time=1.18 ms

====receive====:64 bytes from 192.168.43.159: icmp_seq=4 ttl=64 time=139 ms

====receive====:--- 192.168.43.159 ping statistics ---

====receive====:4 packets transmitted, 4 received, 0% packet loss, time 3004ms

丢包率为100%时则网络为断开状态,上述结果显示发送为4个数据包,丢包率为0,连接正常

android ping网络连接服务器失败,Android 中网络连接检测和使用ping检测网络是否可访问...相关推荐

  1. 电脑显示网络2连接服务器失败,崩坏学园2连接服务器失败 连接不上网络怎么办...

    崩坏学园2连接服务器失败 连接不上网络怎么办.崩坏学园2是一款非常好玩的网络游戏,许多游戏爱好者进入游戏想领略它的玩法,但是近日有许多小伙伴反应一直连接不上服务器,一打开就是连接网络失败这样的界面.那 ...

  2. 一直显示无法连接服务器失败,老显示无法连接服务器失败

    老显示无法连接服务器失败 内容精选 换一换 华为云帮助中心,为用户提供产品简介.价格说明.购买指南.用户指南.API参考.最佳实践.常见问题.视频帮助等技术文档,帮助您快速上手使用华为云服务. 有以下 ...

  3. 开启手机找回连接服务器失败,原神连接服务器失败什么意思?连接服务器失败解决方法...

    原神连接服务器失败怎么办?连接服务器失败是什么意思?6月25日,很多玩家在登陆游戏的时候发现界面弹出了"连接服务器失败"这个提示,导致玩家无法进入游戏中,那么这到底是什么情况呢?应 ...

  4. cf进不去服务器 正在连接,Win7电脑CF连接服务器失败如何解决 CF连接不到服务器怎么办...

    CF是穿越火线游戏的简称,是一款第一人称射击游戏的网络游戏,玩家扮演控制一名持枪战斗人员,与其他玩家进行械斗,然而很多win7系统用户在登录的时候发现CF连接不到服务器,连接服务器失败,遇到这样的问题 ...

  5. win10系统cf连接服务器失败,win10系统cf连接服务器失败的解决方法

    很多小伙伴都遇到过win10系统cf连接服务器失败的困惑吧,一些朋友看过网上零散的win10系统cf连接服务器失败的处理方法,并没有完完全全明白win10系统cf连接服务器失败是如何解决的,今天小编准 ...

  6. 个税显示连接服务器失败,显示金税三期连接税局网络失败怎么办

    显示金税三期连接税局网络失败怎么办,遇到这样的问题,大家不要慌乱,先确定自己的网络是否连接好,如果还不行就联系税务局人员解答,金税三期软件功能很多,大家对里面的工具不熟练的,可以多去操作一下.如果不太 ...

  7. mt管理器显示连接服务器失败,mt管理器连接ftp服务器

    mt管理器连接ftp服务器 内容精选 换一换 通过FTP或SFTP连接,可以对FTP或SFTP服务器抽取或加载文件,支持CSV.二进制和JSON格式.FTP和SFTP的连接参数相同. 只有运行中的云服 ...

  8. 手机版qq邮箱一直连接服务器失败,iphone邮箱怎么连接服务器 iphone邮箱无法连接服务器怎么办...

    随着现在手机的使用频率越来越高,它不仅对我们学习以及娱乐非常重要,工作方面也有很大好处,比如手机的邮箱功能便是如此.通过手机邮箱,我们不仅联络亲朋好友非常方便,处理工作的事情也是相当便利,它还可以帮助 ...

  9. 问道打开时显示连接服务器失败怎么办,荒野行动连接不上服务器怎么办 服务器连接失败解决-游侠手游...

    在荒野行动中想要进入游戏,连接服务器便是第一个步骤.但是很多的玩家却出现了无法连接服务器的情况.所以这里小编就为大家带来了无法连接服务器的解决办法,还在为这个问题而困惑的玩家不妨随小编的脚步一起来看看 ...

最新文章

  1. Oracle Index
  2. 趣学python3(19)-函数-Lambda
  3. 基于Spring boot,使用idea方便地切换启动环境
  4. 安全模式 提权_记一次渗透挖洞提权实战
  5. python协同过滤调用包_简单的python协同过滤程序实例代码
  6. python工厂模式 简书_[Python设计模式] 01 - 简单工厂模式
  7. 内网DNS地址自己定
  8. 金三银四面试季—20道精选JVM重点面试问题!
  9. 2种方式打开jar文件
  10. java压缩linux上的文件,java linux下文件压缩
  11. 计算机管理员命令符怎么关机,详细教您电脑关机命令是什么
  12. 华为云服务器安装win10系统,云服务器安装win10
  13. 微信公众号原主体已注销 如何办理账号迁移及公证书?
  14. 什么是Google AMP
  15. 计算机yiji教案,剑桥一级下册详细教案
  16. safari看html5卡顿,MacOS下Safari 10浏览器卡顿解决方案整理 - YangJunwei
  17. 记一次使用android studio分析app闪退原因的过程
  18. 第十一届蓝桥杯 ——成绩统计
  19. 基于JavaWEB+MySQL的学生在线测评考试系统
  20. STM32物联网项目-ADC采集实验板板温度(NTC热敏电阻)

热门文章

  1. linux ps 命令大全
  2. lol服务器维护补偿,LOL官方:服务器崩溃补偿!全服再次免费赠送皮肤一款!
  3. 命名实体如何进行概念消歧?
  4. 【微信技术-微信小程序】------- 渐进式骨架屏(加载流)(第二篇)
  5. python学习 day49之CSS网页布局
  6. DilatedEncoder
  7. itan:cookie-session简介
  8. SCSI子系统基础学习笔记 (之UFS子系统) - 1.2 概述(软件部分)
  9. 华为机试-字符串子序列II
  10. Python每日一记196pandas.core.indexing.IndexingError: Too many indexers