# PingApplication **Repository Path**: riskylampard/PingApplication ## Basic Information - **Project Name**: PingApplication - **Description**: 使用socket以及定时器定时向服务器请求信息,进而测试一段时间的丢包率,得到网络状态信息。 - **Primary Language**: Java - **License**: GPL-3.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-08-01 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # PingApplication #### 介绍 使用socket以及定时器定时向服务器请求信息,进而测试一段时间的丢包率,得到网络状态信息。 #### 背景介绍: 这是帮我同学做的一个小项目,他实验室需要一个App来测量在干扰设备的作用下,网络的丢包率,进而得到干扰设备的性能参数。 #### 界面: 主界面: image-20200801152243811 计时测试:设置计时时间,以倒计时的方式来测量一段时间的丢包率。 image-20200801152354686 丢包率界面:展示当前的丢包率 image-20200801152430599 连续丢包界面:设置最大连续丢包的数量,以正计时的方式来测量 image-20200801152539362 #### 核心逻辑 ```java mCountDownViewModel.start.observe(this, new Observer() { @Override public void onChanged(Boolean aBoolean) { if(aBoolean){ mCountDownViewModel.set.postValue(false); mCountDownViewModel.countDownPingTimer = new Timer(); mCountDownViewModel.countDownPingTimerTask = new TimerTask() { @Override public void run() { retrieveFeedTask.pingThread(Config.urls, mStateViewModel.packetNum.getValue()); } }; mCountDownViewModel.countDownPingTimer.scheduleAtFixedRate(mCountDownViewModel.countDownPingTimerTask, 0, 250); mCountDownViewModel.countDownRunTimer = new Timer(); mCountDownViewModel.countDownRunTimerTask = new TimerTask() { @Override public void run() { mCountDownViewModel.calCurTime(); } }; mCountDownViewModel.countDownRunTimer.scheduleAtFixedRate(mCountDownViewModel.countDownRunTimerTask,1000,1000); } } }); ``` 使用2个定时器,一个用来发送socket信息,一个用来更新时钟的显示。 考虑到对同一个网站过于频繁地访问有可能会被拒绝,所以使用2个网站: ```java public void pingThread(String[] urls, int count){ //Log.d(TAG,"进入pingThread方法"); Ping pingResult;//此为 ping 的结果 double totalCount = 0;//ping 的总次数 int passCount = 0;//ping 通的次数 int failCount = 0;//ping 失败的总次数 URL[] urlArray = new URL[2]; try { urlArray[0]=new URL(urls[0]); urlArray[1]=new URL(urls[1]); } catch (MalformedURLException e) { e.printStackTrace(); Log.d("ping","需要2个url,同时要是可取的url路径"); } pingResult = Ping.ping(urlArray[count%2], mContext); if (pingResult.isSuccessful){ Log.d(TAG, "ping 成功!"); notifyPingSuccess(); }else{ Log.d(TAG, "ping 失败!"); notifyPingFailure(); } return; } ```