Как я могу контролировать скорость трафика (отправленных байтов) в Java (Jpcap) - PullRequest
2 голосов
/ 08 июля 2010

Я делаю приложение сетевого моделирования в своем классе. Я уже сделал весь код, однако у меня возникают проблемы с контролем скорости отправляемого трафика.

Пользователь приложения может ввести желаемую скорость, которую он хочет сгенерировать (например, 10 МБ / с). Я делаю этот контроль каким-то действительно дурацким способом. Я сделал пакет UDP / TCP в Java, который имеет определенные байты (например, 8192 байта). Зная это, я создал поток, который длится одну секунду, и продолжает проверять, достиг ли он уже своего лимита (в секундах или размере), и продолжает посылать, пока не достигнет. Следующий алгоритм объясняет мою дерьмовую идею.

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;
     }
}

Я думаю , что этот подход довольно плохой, есть ли лучший способ контролировать это ???

1 Ответ

2 голосов
/ 09 июля 2010

Определите, сколько пакетов из 8192 байтов вы можете отправлять в секунду в пределах достижимой полосы пропускания. Посылайте столько пакетов (N) и после каждого спящего режима в течение 1000 / N миллисекунд. Вам придется настроить его так, чтобы учесть фактически затраченное время на отправку, но вы получите общее представление.

...