最近项目里面有这样一个需求,由于项目涉密需要连接VPN通过网址映射去登录内部服务器,而且要通知客户vpn的连接状态。网上有许多类似的连接VPN的解决方案,我也尝试了很多种,下面先列出一种比较靠谱的方式。

private static final boolean ping() {
String result = null;
try {String ip = "xxx.xxx.xxx.xxx";// 在这里填入连接地址Process p = Runtime.getRuntime().exec("/system/bin/ping -c 3 -w 100 " + ip);//ping3次// 读取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);}Log.i("TTT", "result content : " + stringBuffer.toString());// 返回的PING的状态int status = p.waitFor();if (status == 0) {result = "successful~";return true;} else {result = "failed~ cannot reach the IP address";}
} catch (IOException e) {result = "failed~ IOException";
} catch (InterruptedException e) {result = "failed~ InterruptedException";
} finally {Log.i("TTT", "result = " + result);
}
return false;
}

  这种方式是通过调用Android的ping命令来ping网络地址,通过返回的状态码来检测是否连接成功。这个思路本来是极好的,但是在实际实施的过程中还是出现了不少的问题。首先是返回的状态码并不能真实的反应是否真正的连通了所指向的地址,状态码有0,1,2三种状态,我发现只有当完全断开网络的时候就会出现返回0的状态,但是1和2这两个状态不好判断,有一段时间返回的是1的状态,有时候返回的是2的状态,但是出现这两种状态并不能实际的反应连接VPN成功了。然后就换了一个思路,不去通过返回的状态码去判断,那么我通过返回的数据去判断总可以了吧,去判断发送的包和返回包的大小判断,但是发现手机没有root是获取不到返回结果的。通过ping命令的这条路已经堵死了。。。。

  后来又换了一个思路,就是在应用里面写一个调用后台的接口,这个借口不干其他事情,就返回true和false 如果接收到了前端发送过来的数据就返回true,如果没接受到就返回false,最后,在Android端设置一个定时任务调用这个接口,最终才完美解决该问题。

总结:问题总能解决,只要多动脑。网上大部分文章是抄袭的,真正的实现还是要自己去完成。

转载于:https://www.cnblogs.com/BobAdmin/p/5820938.html

Android应用连接代理服务器状况监测解决相关推荐

  1. android蓝牙连接133问题的解决办法---(连接篇)

    上一篇文章介绍了"蓝牙扫描",今天来说一下android蓝牙连接过程中133的问题: 我们经常在网上看到一些答案说需要释放gatt资源,这种方式可以在一定程度上减少出现133的概率 ...

  2. Android蓝牙连接出现133的解决办法

    代码片段:出现连接133的问题找了很久的解决办法,尝试各种亦然不行,最终的解决办法就是下面标红代码 if (status == BluetoothGatt.GATT_SUCCESS) {if (new ...

  3. 解决Android Studio连接不上逍遥模拟器的问题

    H:\app\Microvirt\MEmu\adb.exe start-serverH:\app\AndroidSDK\platform-tools\adb.exe connect 127.0.0.1 ...

  4. 用Think Pad 系统升级程序ThinkVantage System Update时候提示 无法连接代理服务器 的解决办法...

    症状   升级到17%下载程序包信息lenovo help center时,总显示"无法连接代理服务器" 解决办法 应该是装了新版暴风影音这垃圾,打开Internet选项----- ...

  5. 【Android教程】Android Studio找不到连接的手机完全解决办法

    Android Studio找不到连接的手机完全解决办法 1.问题背景 现在Android大多都用谷歌的Android Studio来开发 但是 一开始使用Android Studio都不会那么顺利 ...

  6. android xp wifi连接不上,手把手解决xp系统电脑无线网络连接不上的处理技巧

    可能有的小伙伴遇到过xp系统电脑无线网络连接不上的问题,大部分朋友还是不知道xp系统电脑无线网络连接不上的情况应该怎么解决,因此我就给大家整理总结了xp系统电脑无线网络连接不上的完整解决方案,你只用依 ...

  7. Android Socket连接(模拟心跳包,断线重连,发送数据等)

    首页 博客 学院 下载 GitChat TinyMind 论坛 问答 商城 VIP 活动 招聘 ITeye CSTO 写博客 发Chat 喻志强的博客 耐心 细心 用心 传播正能量 RSS订阅 原 A ...

  8. Android端App无法抓包解决方法——Drony

    Android端App无法抓包解决方法--安装Drony 1:安装drony (这里手机使用的Android设备) 2:开启代理抓包软件(Burpsuite) 3:配置drony转发 1:安装dron ...

  9. Android之内存管理-内存监测-内存优化

    推荐文章:Android进程与内存及内存泄漏 Android之内存管理 1.1 Dalvik Dalvik虚拟机是Android程序的虚拟机,是Android中Java程序的运行基础.其指令集基于寄存 ...

最新文章

  1. uva455periodic strings周期串
  2. Vue实现仿音乐播放器6-实现新歌速递与swiper轮播图切换
  3. 为什么要做一场WebRTC主题的大会?
  4. The Child and Sequence
  5. Java代码的编译与反编译那些事儿
  6. python读音有道-Python版有道翻译
  7. 译Selenium Python Bindings 6 - WebDriver API
  8. Eclipse安装包 百度网盘
  9. Windows批量快速删除大量文件
  10. 黑色脸谱_上演三幕的脸谱剧
  11. python中timeout什么意思_Python爬虫(五)timeout以及retrying的使用
  12. CCTV十集大型纪录片《华尔街》高速下载地址
  13. 【OSX】MAC下能用的炒股软件_我是亲民_新浪博客
  14. 【编程题】【Scratch一级】2020.09 字母AB点头问好
  15. App Clips简介以及demo演示
  16. Unity使MakeHuman人体模型动起来
  17. 3|射频识别技术|第一讲:射频识别技术概述|完整内容
  18. 信息技术课程计算机硬件,初一《信息技术》《计算机硬件及工作原理》说课稿-初中信息技术说课.doc...
  19. excel中数据汇总怎么做?
  20. contig纠错工具

热门文章

  1. elasticsearch ik分词插件配置自定义分词词典
  2. Python Django知识体系
  3. @ConfigurationProperties使用时几个常见误区
  4. com.google.gson.stream.MalformedJsonException: Use JsonReader.setLenient(true) to accept malformed
  5. 使用QtService实现Qt后台服务程序
  6. 4.6 计算机网络之网络层IP组播(IGMP、组播路由选择协议、组播地址)
  7. linux日志文件存放目录,Log4j 日志文件Linux/Mac/Windows通用存放位置设置方法
  8. 安卓车机root改流浪地球_教你王者荣耀改战区
  9. Cpp 对象模型探索 / delete 运算符内部调用过程分析
  10. mysql 5.7.22 winx64_windows下mysql-5.7.22-winx64突然启动不了,报错Could not open log file