bertrandmartel / speed-test-lib

:cloud: JSpeedTest : speed test client library for Java/Android
MIT License
381 stars 119 forks source link

Download speed gives irrelevant values after some tests #33

Closed BAteTR closed 7 years ago

BAteTR commented 7 years ago

` public class SpeedTestTask extends AsyncTask<Void, Void, String> {

    SpeedTestSocket speedTestSocket = new SpeedTestSocket();

    @Override
    protected String doInBackground(Void... params) {

        // add a listener to wait for speed test completion and progress
        speedTestSocket.addSpeedTestListener(new ISpeedTestListener() {

            @Override
            public void onDownloadFinished(SpeedTestReport report) {
                // called when download is finished
                System.out.println("[DL FINISHED] rate in octet/s : " + report.getTransferRateOctet());
                BigDecimal a = new BigDecimal("1048576");
                System.out.println("[DL FINISHED] rate in Mbit/s   : " + report.getTransferRateBit().divide(a));
                olddownloadspeed = report.getTransferRateBit().divide(a);
                downloadspeed = olddownloadspeed.setScale(2,RoundingMode.FLOOR);
                if (startType == 6){
                    startType = 1;
                    speedTestSocket.startFixedUpload("2.testdebit.info", 80, "/", 100000000, 30000,500);
                }
                else  if (startType >= 1){
                    startType++;
                    speedTestSocket.startFixedDownload("2.testdebit.info", 80, "/fichiers/10Mo.dat", 10000,500);
                }

            }

            @Override
            public void onDownloadError(SpeedTestError speedTestError, String errorMessage) {
                 // called when a download error occur
            }

            @Override
            public void onUploadFinished(SpeedTestReport report) {
                // called when an upload is finished
                System.out.println("[UL FINISHED] rate in octet/s : " + report.getTransferRateOctet());
                BigDecimal a = new BigDecimal("1048576");
                System.out.println("[UL FINISHED] rate in Mbit/s   : " + report.getTransferRateBit().divide(a));
                olduploadspeed = report.getTransferRateBit().divide(a);
                uploadspeed = olduploadspeed.setScale(2,RoundingMode.FLOOR);
                enablebutton = true;
            }

            @Override
            public void onUploadError(SpeedTestError speedTestError, String errorMessage) {
                // called when an upload error occur
            }

            @Override
            public void onDownloadProgress(float percent, SpeedTestReport report) {
                // called to notify download progress
                enablebutton = false;
                if(forcetoStop == true){
                     speedTestSocket.forceStopTask();
                     speedTestSocket.clearListeners();
                     speedTestSocket.closeSocket();
                     downloadspeed = BigDecimal.ZERO;
                     uploadspeed = BigDecimal.ZERO;
                }
                else{
                System.out.println("[DL PROGRESS] progress : " + percent + "%");
                System.out.println("[DL PROGRESS] rate in octet/s : " + report.getTransferRateOctet());
                BigDecimal a = new BigDecimal("1048576");
                System.out.println("[DL PROGRESS] rate in Mbit/s   : " + report.getTransferRateBit().divide(a));
                olddownloadspeed = report.getTransferRateBit().divide(a);
                downloadspeed = olddownloadspeed.setScale(2,RoundingMode.FLOOR);
                }
            }

            @Override
            public void onUploadProgress(float percent, SpeedTestReport report) {
                // called to notify upload progress
                if(forcetoStop == true){
                     speedTestSocket.forceStopTask();
                     speedTestSocket.clearListeners();
                     speedTestSocket.closeSocket();
                     uploadspeed = BigDecimal.ZERO;
                    downloadspeed = BigDecimal.ZERO;
                }
                else{
                    System.out.println("[UL PROGRESS] progress : " + percent + "%");
                    System.out.println("[UL PROGRESS] rate in octet/s : " + report.getTransferRateOctet());
                    BigDecimal a = new BigDecimal("1048576");
                    System.out.println("[UL PROGRESS] rate in Mbit/s   : " + report.getTransferRateBit().divide(a));
                    olduploadspeed = report.getTransferRateBit().divide(a);
                    uploadspeed = olduploadspeed.setScale(2,RoundingMode.FLOOR);
                }
            }

            @Override
            public void onInterruption() {
                // triggered when forceStopTask is called
                if(forcetoStop == true){
                    speedTestSocket.forceStopTask();
                     speedTestSocket.clearListeners();
                     speedTestSocket.closeSocket();
                    uploadspeed = BigDecimal.ZERO;
                    downloadspeed = BigDecimal.ZERO;
                }
                else{
                    startAgain();
            }}                  
        });                 
        if(startType == 6){
            speedTestSocket.startFixedUpload("2.testdebit.info", 80, "/", 100000000, 30000,500);
            startType = 1;
        }
        else if(startType >= 1){
            speedTestSocket.startFixedDownload("2.testdebit.info", 80, "/fichiers/10Mo.dat", 10000,500);
            startType++;
        }   
        return null;
    }
}
public void startAgain(){
  new SpeedTestTask().execute();
}`

I try to get download and upload values. I changed my methods several times but i get irrelevant values from download speeds such as 5mbps and after short time 30mbps and then 5 or 1. But i get upload speeds usually relevant values. Now i downloaded 5 times 10mb but values its not relevant always. In past i downloaded 100mb but this problem was same. How can i solve this problem? If i change download or upload adress, is that value can be relevant?