2010-07-08 5 views
2

수업 중에 네트워크 시뮬레이션 응용 프로그램을 만들고 있습니다. 이미 전체 코드를 작성했지만 전송 된 트래픽의 속도를 제어하는 ​​데 문제가 있습니다.Java (Jpcap)에서 트래픽 속도 (바이트 전송)를 제어하는 ​​방법

앱 사용자는 생성하려는 원하는 속도 (예 : 10 MiB/s)를 입력 할 수 있습니다. 나는이 통제를 정말로 진절머리 나는 방식으로하고 있습니다. 특정 바이트 (예 : 8192 바이트)가있는 Java에서 UDP/TCP 패키지를 만들었습니다. 이걸 알면 마지막 1 초가 걸린 스레드를 만들고 이미 한계에 도달했는지 (초 또는 크기) 있는지 확인하고 계속 도달 할 때까지 계속 전송합니다. 다음 알고리즘은 내 엉터리 아이디어를 설명합니다.

이 방법은 매우 가난한 것을
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 밀리 초 동안 기다립니다. 실제로 보내는 데 소요되는 시간을 고려하여 세부 조정해야하지만 일반적인 아이디어를 얻을 수 있습니다.

관련 문제