2012-05-05 10 views
0

接続されたクライアント(サーバ - >クライアント)の待ち時間を計算しようとしています。接続されている)ここで私はそれを(クライアントが切断されていない場合、データを送信しようとしている)pingしています。接続速度(ms)(待ち時間)を計算する

 while (information.connectionEst) 
     { 
      try 
      { 


       byte[] data = Encoding.ASCII.GetBytes(""); 

       stream.Write(data, 0, data.Length); 


      } 
      catch (Exception e) 
      { 

       killConnection(); 
       thread.Abort(); 
      } 

     } 

データパケットの送信にかかった時間を計算する必要があると仮定します。しかし、私はそれを行う方法がわかりません。どんな援助も訴えられるでしょう。

+0

(クライアントとサーバーの両方を実装していると仮定して)サーバーが現在の時刻をクライアントに送信し、クライアントがそれを送り返してから差異を見つけて2で割ります対称接続)。 – Adam

+0

これはlocalhost、または同じタイムゾーンでしか動作しませんでしたが?これは複数の接続を持っています。 –

+3

クライアントの時間はそれに来ていません。サーバで9:30:00、クライアントで5:30と言ってください。サーバはクライアントに "9:30:00"のパケットを送り、クライアントはそれを返し、サーバはパケットを受信します。これはサーバー上で9:30:01になりました。サーバーは1秒の往復、または各方法で0.5秒かかったと推測できます...送信した各パケットのサーバー状態に時間を格納することで同じ結果を得ることができますが、しかし、この方法は簡単です(そしてより汚れています)。 – Adam

答えて

2

接続の単方向の待ち時間(サーバー→クライアント)を取得することは非常に困難です。接続の両端に非常に正確な時間があることがわかっている場合(たとえば、GPSや原子時計、高品質のNTP同期クロックなど)、タスク専用の各サイドで実行されているソフトウェアがあれば、それを行うことができます。

それ以外の場合は、両方向(RTT、ラウンドトリップ時間)でレイテンシを計算し、2で除算し、接続がパケットのパスが対称であることを期待してください。パケットのパスが対称でない場合、パケットは一方向に他のものよりも移動するのに時間がかかり、どれくらい長く先験的に知ることができません。

RTTの計算は簡単です。最初の側で短いメッセージを送信し、もう一方の側ですぐに別のメッセージを返すようにしてください。第1の側は、要求メッセージがRTTを得るために送信された時点から応答メッセージが受信された時間を差し引く。

関連する問題