Comment puis-je contrôler la vitesse de la circulation (octets envoyés) en Java (JPCAP)

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

  •  13-09-2020
  •  | 
  •  

Question

Je fais une application de simulation de réseau dans ma classe.J'ai déjà fait le code entier, mais j'ai des problèmes pour contrôler la vitesse du trafic envoyé.

L'utilisateur de l'application peut saisir la vitesse souhaitée qu'il souhaite générer (par exemple 10 mib / s).Je fais ce contrôle de manière vraiment merdique.J'ai créé un paquet UDP / TCP en Java qui a des octets spécifiques (par exemple 8192 octets).Connaissant cela, j'ai fait un fil qui dure une seconde et continue à vérifier s'il est déjà atteint sa limite (en secondes ou la taille) et conserve l'envoi jusqu'à ce qu'il soit atteint.L'algorithme suivant explique mon idée de merde.

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

Je pense que cette approche est assez médiocre, existe-t-il un meilleur moyen de contrôler cela ???

Était-ce utile?

La solution

Travaillez le nombre de paquets de 8192 octets que vous pouvez envoyer par seconde dans la bande passante réalisable.Envoyez que de nombreux paquets (N) et après chaque sommeil pour 1000 / N millisecondes.Vous devrez l'ajuster pour pouvoir rendre compte du temps passé à envoyer, mais vous obtenez l'idée générale.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top