Iphone 以编程方式确定internet上的速度

Iphone 以编程方式确定internet上的速度,iphone,Iphone,我知道通过可达性,你可以检查你是否连接到互联网。但是有没有办法确定连接的速度呢? 我试图分别计算上传速度和下载速度 如何以编程方式确定internet上的速度?如果您使用NSURLConnection获取大文件(例如,1 MB或更大),则可以使用来跟踪中间下载进度 具体来说:如果您测量下载的字节数差异和对代理的调用之间的时间差异,那么您可以计算每秒字节数(或其他时间单位)的持续速度 步骤2:在控制器中集成NSURLSessionDelegate、NSURLSessionDataDelegate方

我知道通过可达性,你可以检查你是否连接到互联网。但是有没有办法确定连接的速度呢? 我试图分别计算上传速度和下载速度


如何以编程方式确定internet上的速度?

如果您使用
NSURLConnection
获取大文件(例如,1 MB或更大),则可以使用来跟踪中间下载进度


具体来说:如果您测量下载的字节数差异和对代理的调用之间的时间差异,那么您可以计算每秒字节数(或其他时间单位)的持续速度

步骤2:在控制器中集成
NSURLSessionDelegate、NSURLSessionDataDelegate
方法

第3步:取两个
CFAbsoluteTime
变量,该变量存储starTime并分配
CFAbsoluteTimeGetCurrent()
didReceiveData:
委托方法中的第二个
stopTime

第4步:像这样计算速度

  CFAbsoluteTime elapsedTime = stopTime - startTime;
  float speedOfConnection = elapsedTime != 0 ? [data length] / (stopTime - startTime) / 1024.0 / 1024.0 : -1;

计算下载/上传速度有两种主要方法

被动测试-这是通过使用iOS方法完成的,该方法为您提供当前传输的字节。您经常对此进行轮询,并通过传输的字节除以时间来计算速度。此方法将为您提供更接近实际用户体验的速度。但是,它不会为您提供容量测量,即连接的预期容量。例如,对于固定网络,ISP通常基于速度销售软件包-例如100 Mbit软件包、1 Gbit软件包。如果你想知道ISP是否提供了速度,被动的方法不是办法!由于用户不是一直在满负荷使用,因此速度会低得多

主动测试-此方法要求下载数据并将其上载到远程服务器,以获得下载/上载速度和延迟。这是之前的评论者所建议的。重要的方法是实现使用单线程还是多线程进行测试。单线程不会使internet连接饱和,也不会显示连接的最大容量

有许多方法论如何测试“互联网速度”,没有一个“真正的”速度。您可以查看以下标准,了解推荐的方法:

您还可以使用我们的iOS SDK,它可以满足您的需要,并且符合ITU标准:


这并没有回答你的问题,但顺便说一句,在我看来,当人们将同一台设备连接到多个互联网源(家里或办公室的WiFi、3G out等)时,应用程序应该能够支持实际可用的任何速度;即使只有一个来源,速度实际上也会快速变化。现在可以测量互联网速度或wifi强度了吗。注意:如果你的应用程序试图在我的3G连接上下载大于1MB的数据,只是为了确定这是缓慢的,我不会高兴(不过,我的运营商可能会很高兴)。事实上,我会非常不高兴,因为你在毫无意义地蚕食我微薄的数据限制;如果你反复这么做,情况会更糟。(如果你正在测量应用程序实际需要的数据传输——这需要一段时间,但我会处理)哦,当然。但这可以提供正常下载的持续速度,例如在应用程序正常运行的过程中。或者,如果该应用程序是网络测试应用程序,则最终用户将运行该应用程序,知道它将通过网络连接请求一个大文件。所以我认为,即使是对于蜂窝网络连接,如果使用得当,它仍然是一种有用的方法……是否可以在不下载任何文件的情况下确定互联网速度?可能是通过ping/ICMP?