# 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来测量在干扰设备的作用下,网络的丢包率,进而得到干扰设备的性能参数。
#### 界面:
主界面:
计时测试:设置计时时间,以倒计时的方式来测量一段时间的丢包率。
丢包率界面:展示当前的丢包率
连续丢包界面:设置最大连续丢包的数量,以正计时的方式来测量
#### 核心逻辑
```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;
}
```