Determine the speed on internet programmatically

I know with reachability you can check if you are connected to the internet. But is there a way to determine the speed of that connection? I am trying to calculate upload speed as well as download speed separately.

How to determine the speed on internet programmatically?


Solution 1:

If you use NSURLConnection to grab a large file (say, 1 MB or greater), you can use a delegate to track intermediate download progress.

Specifically: If you measure the difference in bytes downloaded and the difference in time between calls to the delegate, then you can calculate the ongoing speed in bytes per second (or other time unit).

Solution 2:

step 1: Take downloadable file url and configure a it with a NSURLSession and its method dataTaskWithUrl.

step 2 : Integrate NSURLSessionDelegate, NSURLSessionDataDelegate method in your controller.

step 3: Take two CFAbsoluteTime variable which store starTime and assign CFAbsoluteTimeGetCurrent() and second one stopTime in didReceiveData: Delegate method.

step 4 : Count speed like this

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