2012-02-29 11 views
8

私はインターネットに接続しているかどうかを確認することができます。しかし、その接続の速度を決定する方法はありますか? アップロード速度とダウンロード速度を別々に計算しようとしています。プログラムによるインターネットの速度の決定

どのようにプログラム上でインターネット上の速度を決定するのですか?

+2

のようにそれはあなたの質問に答えていませんが、余談として、私の心の中のアプリは、実際に利用できるものは何でも速度をサポートすることができるはずです人々は同じデバイスを複数のインターネットソースに接続します(家庭や職場でのWiFi、3Gなど)。実際には単一のソース速度でも急速に変化する可能性があります。 –

+0

インターネット速度や無線LANの強度を測定できるようになりましたか? – Imran

答えて

4

NSURLConnectionを使用して大きなファイル(1 MB以上など)を取得する場合は、delegateを使用してダウンロードの進行状況を追跡できます。

具体的には、ダウンロードされたバイトの違いとデリゲートへの呼び出しの時間の差を測定すると、進行中の速度をバイト/秒(または他の時間単位)で計算できます。

+2

注:あなたのアプリが自分の3G接続で> 1MBをダウンロードしようとすると、それが* slooooow *であることを確認するだけで、私は満足できません(私のキャリアはあるかもしれません)。実際、私は貧弱なデータの限界を無駄に食べていると誇らしく思っています。あなたが繰り返しそれを行うならば、もっともっと。 (アプリケーションが実際に必要とするデータ転送を測定している場合は、時間がかかりますが、私は管理します) – Piskvor

+1

ああ、確かです。しかし、これは、通常の業務を行っている間に進行する通常のダウンロードの進行中のスピードを提供する可能性があります。または、アプリケーションがネットワークテストアプリケーションの場合、エンドユーザーはネットワーク接続を介して大きなファイルを要求することを知っているので、これを実行します。だから私はそれがインテリジェントかつ適切に使用されるならば、それがまだ携帯電話接続のための有用なアプローチだと主張するでしょう... –

+0

最も確かに。 – Piskvor

2

手順1:ダウンロード可能なファイルURLを取得し、NSURLSessionとその方法dataTaskWithUrlで構成します。

手順2:NSURLSessionDelegate, NSURLSessionDataDelegateメソッドをコントローラに組み込みます。

ステップ3: STARTIMEを格納2つのCFAbsoluteTime変数を取り、didReceiveData:委任方法でCFAbsoluteTimeGetCurrent() 2つ目stopTimeを割り当てます。

ステップ4:カウント速度として、この

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

クリア命令、ありがとう! – ArtStyle

関連する問題