2010-07-08 21 views
2

我正在我的课堂上做一个网络模拟应用程序。我已经完成了整个代码,但是我在控制发送流量的速度方面遇到了麻烦。我怎样才能控制Java(Jpcap)中的流量速度(字节发送)

应用程序的用户可以输入他想要生成的期望速度(例如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; 
    } 
} 

认为,这种做法是相当差的,有没有更好的办法来控制这个???

回答

2

计算出您可以在可达到的带宽内每秒发送多少个8192字节的数据包。发送那么多的数据包(N),并在每个睡眠1000/N毫秒后。您必须对其进行微调以说明实际花费的时间,但您会了解一般想法。