W / System.err: java.io.IOException: неожиданное завершение потока при подключении - PullRequest
0 голосов
/ 07 января 2019

Я разработал приложение для Android, которое использует PHP веб-API для хранения и извлечения данных с сервера MySQL, который размещен в общедоступной учетной записи общего хостинга. У меня фиксированная база пользователей около 550 человек, которые должны входить в мое приложение и вводить данные. На этапе тестирования я никогда не сталкивался с какими-либо проблемами с подключением. Но когда он запущен с полной пользовательской базой, он случайно показывает ошибку «W / System.err: java.io.IOException: неожиданное завершение потока при соединении». Много искал в сети и в итоге получил ответы, которые мне не помогли. Я был бы очень признателен, если бы кто-нибудь имел представление о том, что происходит не так.

Сначала я использовал AsyncTask & HttpURLConnection для подключения к веб-серверу. Затем заменили залп частично. Но по-прежнему возникают те же проблемы, особенно когда большинство пользователей пытаются получить доступ одновременно. Ниже приведен мой обработчик веб-запросов.

public class RequestHandler {

    public String sendPostRequest(String requestURL, HashMap<String, String> postDataParams){
        URL url;

        StringBuilder sb;
        String sbString;

    try{
        url = new URL(requestURL);

        //Creating a http url connection
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();

        //Configuring connection properties
        conn.setReadTimeout(15000);
        conn.setConnectTimeout(15000);
        conn.setRequestMethod("POST");
        conn.setDoInput(true);
        conn.setDoOutput(true);

        //Creating an output stream
        OutputStream os = conn.getOutputStream();

        BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os, "UTF-8"));
        writer.write(getPostDataString(postDataParams));
        writer.flush();
        writer.close();
        os.close();

        int responseCode = conn.getResponseCode();

        if(responseCode == HttpURLConnection.HTTP_OK){
            BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
            sb = new StringBuilder();
            String response;

            while((response = reader.readLine()) != null){
                sb.append(response);
            }
            sbString = sb.toString();
            Log.d("RequestHandler", "***** sendPostRequest() >> HTTP_OK >> "+sbString);
        }
        else{
            sbString = "{\"error\": true,\"message\":\"URL Connection Error\"}";
        }
    }
    catch (SocketTimeoutException conTimeoutEx) {
        sbString = "{\"error\": true,\"message\":\"Timeout caused by poor Internet connectivity.\"}";
    }
    catch(Exception e){
        sbString = "{\"error\": true,\"message\":\"technical error: "+e.getMessage()+"\"}";
        e.printStackTrace();
    }

    //return sb.toString();
    return sbString;
}

}

Я получаю исключение во втором блоке catch. Такое же исключение возникает при использовании залпа.

...