Как я могу контролировать скорость трафика (отправленные байты) в Java (JPCAP)

StackOverflow https://stackoverflow.com/questions/3206644

  •  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 миллисекунд.Вам придется точно настроить его, чтобы объяснить время, на самом деле потраченное по отправке, но вы получаете общую идею.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top