Como é que posso controlar a velocidade de tráfego (bytes enviados) em Java (Jpcap)

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

  •  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???

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top