iOS計算網路測試中的丟包率,延遲,下載速度等引數、iOS實現ping
阿新 • • 發佈:2018-12-31
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">這段時間公司iOS的網路測試的專案。</span>
首先,對我最不好做的模組Ping,這網上找了很久的資料都指向SimplePing這個原始碼,SimplePing是由Apple提供的官方程式碼,官方下載地址:SimplePing,這裡有一個對SimplePing進行封裝的Demo,但是這個demo只能告訴使用者ping的結果,即ping成功還是Ping失敗了,不能像在Mac的終端和win的CMD命令列中顯示ping的詳情結果,所以並不完美。由於現在對ICMP並不熟悉,不知道怎麼通過ICMP來計算這些引數,所以昨天晚上找資料到凌晨3點,在CocoaChina程式碼區,終於看到一個demo,心存僥倖地運行了一下,執行結果好極了,跟我想要的基本一致,原文 連結,demo相當完美。demo下載地址https://github.com/lovesunstar/STPingTest。不過demo裡面用到了作者自己的框架需要自己新增到工程中去,,並且還需要匯入一個系統庫libz.1.2.5,也需要手動匯入工程。
其次,網路下載速度,比較簡單。用AFNetWork中的AFURLConnectionOperation
- (void)setDownloadProgressBlock:(void (^)(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead))block; 方法,在block中計算每秒鐘的下載速度。
在計算速度的時候需要自己寫一個downTask類,負責計算、記錄每一秒(左右)的速度。downTask主要程式碼<a target=_blank href="http://doc.okbase.net/conslee/archive/126370.html">點選開啟連結</a> 或 http://doc.okbase.net/conslee/archive/126370.html
<span style="font-family: Arial, Helvetica, sans-serif;">connectionOperation = [[AFURLConnectionOperation alloc] initWithRequest:request];</span>
[connectionOperation setDownloadProgressBlock:^(NSUInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead) {
// NSLog(@"bytesRead:%zi", bytesRead);
// NSLog(@"totalBytesRead:%zi", totalBytesRead);
// NSLog(@"totalBytesExpectedToRead:%zi", totalBytesExpectedToRead);
weakSelf.downTask.totalReadPeriod += bytesRead;
weakSelf.downTask.totalRead += bytesRead;
NSDate *currentDate = [NSDate date];
if ([currentDate timeIntervalSinceDate:weakSelf.downTask.oldDatePeriod] >= 1) {
double speed = [weakSelf.downTask getSpeedWithDate:currentDate];
[weakSelf.gaugeView setGaugeValue:speed animation:YES];
NSString *unit = nil;
if (speed > RATIO) {
unit = @"M";
speed = speed / RATIO;
}
else {
unit = @"KB";
speed = speed;
}
NSLog(@"current speed:%f %@", speed, unit);
weakSelf.labSpeed.text = [NSString stringWithFormat:@"%.2f %@", speed, unit];
//NSLog(@"totalBytesRead:%zi", totalBytesRead);
}
}];