2010-08-20 2 views
5

아무도 소켓의 대역폭 사용량을 계산하는 방법에 대한 정보가 있습니까?소켓을 통해 송수신되는 데이터의 대역폭 속도를 계산 하시겠습니까?

예를 들어, 제가 연결되어있는 서버에 소켓을 통해 데이터를 보내면 보내지는 Kb/s를 보여주고 싶습니다.

Google 검색에서 유용한 정보를 찾지 못했습니다. 어쩌면 나는 잘못된 용어를 찾고 있을지도 모른다.

+0

이 기사에서는 몇 가지 아이디어를 제공 할 수 있습니다. http://www.roseindia.net/javatutorials/counting_bytes_on_sockets.shtml – darri

답변

5

아마도 일 수있는 가장 좋은 방법은 쓰기를 시작할 때 기록한 다음 Socket.getOutputStream.write() 방법으로 전송 한 바이트 수를 계산하는 것입니다. 소량의 데이터의 경우 OS의 전송 버퍼를 채우는 데있어 부정확 할 것입니다. 전송 버퍼는 처음에 실제로 전송하는 것보다 훨씬 빠르게 바이트를 가져옵니다.

그러나 상당히 많은 양의 데이터에 대해 정확한 비율로 상각해야합니다.

+0

이론적으로는 작동하지만 현재 속도에서 매우 정확한 전송 속도 표현을 제공하지는 못합니다 순간. 예 : 5 분 동안 기록하는 경우 처음 2.5 분 동안 아무 작업도하지 않고 마지막 2.5 분 100kb/s를 보냈습니다. 5 분이 끝날 때 속도가 평균 50kb/s라고 알려줍니다. 내가 전송을 시작한 이후 평균 속도를 찾고 있지 않습니다. 현재 속도를 찾고 있습니다. 어쩌면 지난 5 초의 평균은 효과가 있었지만 그런 식으로 녹음하는 것에 대해서는 전혀 모른다. –

+1

이동 평균 : http://en.wikipedia.org/wiki/Moving_average. 다양한 방법이 있지만 계산하기가 매우 간단합니다. 주어진 순간에 대역폭을 계산하는 것과 같은 것은 없습니다. 데이터는 이산이므로 평균을 가져야합니다. 한 가지 매우 간단한 방법은'average = (average + new_measurement_average)/2.0'입니다. –

+2

참고 : 구아바는 [CountingOutputStream (http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/io/CountingOutputStream.html)는 매우 쉽게 다른 스트림과 출력 스트림을 포장 할 수있다 그것은 쓰여진 바이트 수를 센다. –

관련 문제