아무도 소켓의 대역폭 사용량을 계산하는 방법에 대한 정보가 있습니까?소켓을 통해 송수신되는 데이터의 대역폭 속도를 계산 하시겠습니까?
예를 들어, 제가 연결되어있는 서버에 소켓을 통해 데이터를 보내면 보내지는 Kb/s를 보여주고 싶습니다.
Google 검색에서 유용한 정보를 찾지 못했습니다. 어쩌면 나는 잘못된 용어를 찾고 있을지도 모른다.
아무도 소켓의 대역폭 사용량을 계산하는 방법에 대한 정보가 있습니까?소켓을 통해 송수신되는 데이터의 대역폭 속도를 계산 하시겠습니까?
예를 들어, 제가 연결되어있는 서버에 소켓을 통해 데이터를 보내면 보내지는 Kb/s를 보여주고 싶습니다.
Google 검색에서 유용한 정보를 찾지 못했습니다. 어쩌면 나는 잘못된 용어를 찾고 있을지도 모른다.
아마도 일 수있는 가장 좋은 방법은 쓰기를 시작할 때 기록한 다음 Socket.getOutputStream.write()
방법으로 전송 한 바이트 수를 계산하는 것입니다. 소량의 데이터의 경우 OS의 전송 버퍼를 채우는 데있어 부정확 할 것입니다. 전송 버퍼는 처음에 실제로 전송하는 것보다 훨씬 빠르게 바이트를 가져옵니다.
그러나 상당히 많은 양의 데이터에 대해 정확한 비율로 상각해야합니다.
이론적으로는 작동하지만 현재 속도에서 매우 정확한 전송 속도 표현을 제공하지는 못합니다 순간. 예 : 5 분 동안 기록하는 경우 처음 2.5 분 동안 아무 작업도하지 않고 마지막 2.5 분 100kb/s를 보냈습니다. 5 분이 끝날 때 속도가 평균 50kb/s라고 알려줍니다. 내가 전송을 시작한 이후 평균 속도를 찾고 있지 않습니다. 현재 속도를 찾고 있습니다. 어쩌면 지난 5 초의 평균은 효과가 있었지만 그런 식으로 녹음하는 것에 대해서는 전혀 모른다. –
이동 평균 : http://en.wikipedia.org/wiki/Moving_average. 다양한 방법이 있지만 계산하기가 매우 간단합니다. 주어진 순간에 대역폭을 계산하는 것과 같은 것은 없습니다. 데이터는 이산이므로 평균을 가져야합니다. 한 가지 매우 간단한 방법은'average = (average + new_measurement_average)/2.0'입니다. –
참고 : 구아바는 [CountingOutputStream (http://docs.guava-libraries.googlecode.com/git/javadoc/com/google/common/io/CountingOutputStream.html)는 매우 쉽게 다른 스트림과 출력 스트림을 포장 할 수있다 그것은 쓰여진 바이트 수를 센다. –
이 기사에서는 몇 가지 아이디어를 제공 할 수 있습니다. http://www.roseindia.net/javatutorials/counting_bytes_on_sockets.shtml – darri