Как я могу контролировать скорость трафика (отправленные байты) в Java (JPCAP)
-
13-09-2020 - |
Вопрос
Я делаю приложение сетевого моделирования в моем классе.Я уже сделал весь код, однако я получаю неприятности, чтобы контролировать скорость отправленного трафика.
Пользователь приложения может ввести желаемую скорость, которую он хочет генерировать (например, 10 MIB / S).Я делаю этот контроль в некотором действительно дрянном пути.Я сделал пакет 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;
}
}
.
I думаю, что этот подход довольно бедный, есть ли лучший способ контролировать это ???
Решение
Работайте, сколько пакетов 8192 байтов вы можете отправить в секунду в пределах достижимой пропускной способности.Отправьте это много пакетов (N), а после каждого сна для 1000 / N миллисекунд.Вам придется точно настроить его, чтобы объяснить время, на самом деле потраченное по отправке, но вы получаете общую идею.