我在我的课堂上进行网络仿真应用程序。我已经完成了整个代码,但我在控制发送的流量的速度时遇到麻烦。

应用程序的用户可以输入他想要生成的所需速度(例如10 mib / s)。我以一些非常糟糕的方式这样的控制。我在Java中制作了一个UDP / TCP包,具有特定字节(例如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