Como é que posso controlar a velocidade de tráfego (bytes enviados) em Java (Jpcap)
-
13-09-2020 - |
Pergunta
Eu estou fazendo uma rede de simulação de aplicação na minha classe.Eu já fiz todo o código, no entanto estou a ficar com problemas em controlar a velocidade do tráfego enviado.
O usuário do aplicativo pode introduzir a velocidade desejada que ele quer gerar (por exemplo, 10 Mb/s).Eu estou fazendo esse controle em alguns realmente péssima forma.Eu fiz um UDP/TCP do pacote em Java que tem um específico bytes (por exemplo 8192 bytes).Sabendo isso eu fiz uma Thread que duram um segundo e continua a verificar se ele já atingiu seu limite (em segundos ou tamanho) e mantém envio até que ele chegou.O algoritmo a seguir explicar a minha péssima idéia.
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;
}
}
Eu acho que que esta abordagem é muito pobre, não há melhor maneira de controlar isso???
Solução
Quantos pacotes de 8192 bytes, você pode enviar por segundo dentro da largura de banda alcançável.Enviar que muitos pacotes (N), e depois de cada um de sono para 1000/N milissegundos.Você vai ter que ajustá-lo para contabilizar o tempo realmente passou a enviar, mas você entendeu a idéia geral.