2

クラスでネットワークシミュレーションアプリケーションを作成しています。私はすでにコード全体を実行しましたが、送信されるトラフィックの速度を制御するのに問題があります。

アプリのユーザーは、生成したい速度(たとえば、10 MiB / s)を入力できます。私はこのコントロールを本当にくだらない方法でやっています。特定のバイト(たとえば、8192バイト)を持つUDP/TCPパッケージをJavaで作成しました。これを知って、私は1秒間続くスレッドを作成し、それがすでに制限(秒またはサイズ)に達しているかどうかをチェックし続け、達するまで送信を続けます。次のアルゴリズムは私のくだらない考えを説明しています。

sendWithLimit (byte limit, JpcapSender sender, Packet pkg) {
     byte current = 0;
     long timeStamp = System.currentTimeMillis();

     while ((current < limit) && (System.currentTimeMillis() - timeStamp < 1000))
          sender.send(pkg);
          current += 8192;
     }
}

このアプローチはかなり貧弱だと思いますが、これを制御するためのより良い方法はありますか

4

1 に答える 1

2

到達可能な帯域幅内で 1 秒あたりに送信できる 8192 バイトのパケット数を計算します。その数のパケット (N) を送信し、それぞれが 1000/N ミリ秒間スリープします。実際に送信に費やされた時間を考慮して微調整する必要がありますが、一般的な考え方は理解できます。

于 2010-07-09T02:37:04.090 に答える