2

我正在课堂上制作一个网络模拟应用程序。我已经完成了整个代码,但是在控制发送的流量速度方面遇到了麻烦。

应用程序的用户可以输入他想要生成的所需速度(例如 10 MiB/s)。我正在以某种非常糟糕的方式进行此控制。我用 Java 制作了一个具有特定字节(例如 8192 字节)的 UDP/TCP 包。知道这一点后,我创建了一个持续一秒钟的线程,并继续检查它是否已经达到它的限制(以秒或大小为单位)并继续发送直到达到。以下算法解释了我的糟糕想法。

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

认为这种方法很差,有没有更好的方法来控制它???

4

1 回答 1

2

计算出在可达到的带宽内每秒可以发送多少个 8192 字节的数据包。发送那么多数据包(N),每个数据包休眠 1000/N 毫秒。您必须对其进行微调以考虑实际发送所花费的时间,但您会明白总体思路。

于 2010-07-09T02:37:04.090 回答