bertrandmartel / speed-test-lib

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

Upload timeout Android #4

Closed bevilla closed 8 years ago

bevilla commented 8 years ago

Hi ! First of all, your library looks great and very easy to use, but I have a problem to use it in my Android app. When I'm using it without specific network config in my Android emulator it works perfectly. But when I set my emulator's network speed to something else than "Full" (for example: UMTS, EDGE, etc.) I always get a SOCKET_TIMEOUT.

I have set the timeout to 20 seconds and I'm trying to upload 256kB

Here's my class :

public class Network extends AsyncTask<Void, Void, String> {

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

        SpeedTestSocket speedTestSocket = new SpeedTestSocket();
        speedTestSocket.setSocketTimeout(20000);
        speedTestSocket.addSpeedTestListener(new ISpeedTestListener() {

            @Override
            public void onDownloadPacketsReceived(long packetSize, float transferRateBps, float transferRateOps) {
                Log.i("speed-test-app","download transfer rate  : " + transferRateOps + "Bps");
            }

            @Override
            public void onDownloadError(SpeedTestError errorCode, String message) {
                Log.i("speed-test-app","Download error " + errorCode + " occured with message : " + message);
            }

            @Override
            public void onUploadPacketsReceived(long packetSize, float transferRateBps, float transferRateOps) {
                Log.i("speed-test-app","upload transfer rate  : " + transferRateOps / 1000 + "kbps");
            }

            @Override
            public void onUploadError(SpeedTestError errorCode, String message) {
                Log.i("speed-test-app","Upload error " + errorCode + " occured with message : " + message);
            }

            @Override
            public void onDownloadProgress(float percent,SpeedTestReport downloadReport) {
            }

            @Override
            public void onUploadProgress(float percent,SpeedTestReport uploadReport) {
                Log.i("speed-test-app","Uploading " + percent + "%");
            }

        });

        speedTestSocket.startUpload("2.testdebit.info",
                80, "/", 256000); //will block until upload is finished

        return null;
    }
}

Here's my log :

06-01 15:17:32.253 2281-2419/com.myapp.app I/speed-test-app: Uploading 0.0%
06-01 15:17:32.254 2281-2419/com.myappapp I/speed-test-app: Uploading 25.59961%
06-01 15:17:32.256 2281-2419/com.myapp.app I/speed-test-app: Uploading 51.19922%
06-01 15:17:52.310 2281-2419/com.myapp.app I/speed-test-app: Upload error SOCKET_TIMEOUT occured with message : Error occurred while writing to socket
06-01 15:35:05.693 2281-2417/com.myapp.app I/speed-test-app: Uploading 0.0%
06-01 15:35:05.709 2281-2417/com.myapp.app I/speed-test-app: Uploading 25.59961%
06-01 15:35:05.712 2281-2417/com.myapp.app I/speed-test-app: Uploading 51.19922%
06-01 15:35:25.766 2281-2417/com.myapp.app I/speed-test-app: Upload error SOCKET_TIMEOUT occured with message : Error occurred while writing to socket
06-01 15:35:26.871 2281-2419/com.myapp.app I/speed-test-app: Uploading 0.0%
06-01 15:35:26.874 2281-2419/com.myapp.app I/speed-test-app: Uploading 25.59961%
06-01 15:35:26.875 2281-2419/com.myapp.app I/speed-test-app: Uploading 51.19922%
06-01 15:35:46.927 2281-2419/com.myapp.app I/speed-test-app: Upload error SOCKET_TIMEOUT occured with message : Error occurred while writing to socket

And here's my emualator config capture

And here's my log when uploading with a full network:

06-01 15:49:47.131 2305-2430/com.myapp.app I/speed-test-app: Uploading 0.0%
06-01 15:49:47.134 2305-2430/com.myapp.app I/speed-test-app: Uploading 25.59961%
06-01 15:49:47.137 2305-2430/com.myapp.app I/speed-test-app: Uploading 51.19922%
06-01 15:49:48.192 2305-2430/com.myapp.app I/speed-test-app: Uploading 100.0%
06-01 15:49:59.477 2305-2618/com.myapp.app I/speed-test-app: upload transfer rate  : 20.680185kbps
06-01 15:50:02.153 2305-2432/com.myapp.app I/speed-test-app: Uploading 0.0%
06-01 15:50:02.156 2305-2432/com.myapp.app I/speed-test-app: Uploading 25.59961%
06-01 15:50:02.159 2305-2432/com.myapp.app I/speed-test-app: Uploading 51.19922%
06-01 15:50:02.601 2305-2432/com.myapp.app I/speed-test-app: Uploading 100.0%
06-01 15:50:14.081 2305-2996/com.myapp.app I/speed-test-app: upload transfer rate  : 21.427975kbps
06-01 15:50:16.702 2305-2430/com.myapp.app I/speed-test-app: Uploading 0.0%
06-01 15:50:16.705 2305-2430/com.myapp.app I/speed-test-app: Uploading 25.59961%
06-01 15:50:16.707 2305-2430/com.myapp.app I/speed-test-app: Uploading 51.19922%
06-01 15:50:17.563 2305-2430/com.myapp.app I/speed-test-app: Uploading 100.0%
06-01 15:50:29.349 2305-3210/com.myapp.app I/speed-test-app: upload transfer rate  : 20.18609kbps

As you can see, everything works perfectly without a network limitation :)

bertrandmartel commented 8 years ago

I've reproduced the issue, but specifying google dns rather than the defaults one makes it work so it seems to be network configuration related issue:

The following is working for me :

emulator -netdelay none -netspeed umts -avd Nexus_5_API_23  -dns-server 8.8.8.8,8.8.4.4

The following is not working for me (same result as you) :

emulator -netdelay none -netspeed umts -avd Nexus_5_API_23

This is weird, host is found and connection is successfull on nc -v 2.testdebit.info 80 but this is blocking when 2XXkB is sent

bevilla commented 8 years ago

Ok thanks for your answer ! I'm able to do some test on my app with different connections now :)