Проблемы с сетью при одновременном подключении из одной локальной сети к веб-серверу из приложения Android и веб-браузера - PullRequest
0 голосов
/ 05 октября 2018

У меня есть виртуальный веб-сервер.У меня есть веб-сайт с логикой на PHP (бэкэнд для Yii 1) и приложение для Android, которое общается с сервером.Моя проблема заключается в том, что веб-браузер прекращает загрузку страниц с помощью ERR_CONNECTION_TIMED_OUT, когда мое приложение для Android работает из той же локальной сети.

В приложении для Android у меня есть таймер с интервалом 60 секунд, чтобы запросить у сервера новые данные.Требуется пара минут, чтобы браузер возобновил работу с моим сайтом.Я отправляю свои запросы с помощью AsyncTask и HttpUrlConnection:

public class ServerTask extends AsyncTask<Void, Void, JSONObject> {
private MyTask mTask;
private MyInterfaces.OnServerResponse mEvent = null;

private String readStream(InputStream in) {
    BufferedReader reader = null;
    StringBuffer response = new StringBuffer();
    try {
        reader = new BufferedReader(new InputStreamReader(in));
        String line = "";
        while ((line = reader.readLine()) != null) {
            response.append(line);
        }
    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        if (reader != null) {
            try {
                reader.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
    return response.toString();
}
public void setTask (MyTask nt) {mTask = nt;}
public void setEvent (MyInterfaces.OnServerResponse e) {mEvent = e;}

@Override
protected void onPreExecute() {
    mTask.setSendingState(true);
    mTask.setSendedState(false);
}

@Override
protected JSONObject doInBackground(Void... p) {
    String resultString = "";
    HttpURLConnection conn = null;
    OutputStream os = null;

    try {
        if (State.mServerUpLog) {
            Log.d("MyLibrary", "ServerTask URL: " + mTask.getUrl());
            Log.d("MyLibrary", "ServerTask DATA: " + mTask.getData());
        }
        URL url = new URL(mTask.getUrl() + "?" + String.valueOf(System.currentTimeMillis()));

        conn = (HttpURLConnection) url.openConnection();
        conn.setRequestProperty("Connection", "close");
        conn.setRequestMethod("POST");
        conn.setDoOutput(true);
        conn.setDoInput(true);
        conn.setConnectTimeout(Defines.mConnectTimeout);
        conn.setReadTimeout(Defines.mReadTimeout);

        if (mTask.getData().getBytes().length > 0) {
            conn.setRequestProperty("Content-Length", "" + Integer.toString(mTask.getData().getBytes().length));
            os = conn.getOutputStream();
            byte[] data = mTask.getData().getBytes("UTF-8");
            os.write(data);
        }

        conn.connect();

        resultString = readStream(conn.getInputStream());

        if (State.mServerDownLog) Log.d("MyLibrary", "<---" + resultString);

        if (mTask.getTask() == Defines.MyTASKS.AUTHORIZE)
            return new JSONObject("{\"result\":\"" + resultString + "\"}");

        if (resultString.equalsIgnoreCase("0") || resultString.equalsIgnoreCase("fail")) {
            mTask.setSendedState(true);
            return null;
        }

        if (resultString.equalsIgnoreCase("ok")) {
            mTask.setSendedState(true);
            return new JSONObject();
        }

        try {
            JSONObject mLastObject = new JSONObject(resultString);
            mTask.setSendedState(true);
            return mLastObject;
        } catch (Throwable t) {
            mTask.setSendedState(true);
            t.printStackTrace();
        }
    } catch (MalformedURLException e) {
        Log.d("MyLibrary", "ServerTask");
        e.printStackTrace();

        if (mEvent != null) mEvent.OnFailback(mTask.getHashCode());
        return null;
    } catch (IOException e) {
        Log.d("MyLibrary", "ServerTask");
        e.printStackTrace();

        if (mEvent != null) mEvent.OnFailback(mTask.getHashCode());
        return null;
    } catch (Exception e) {
        Log.d("MyLibrary", "ServerTask");
        e.printStackTrace();

        if (mEvent != null) mEvent.OnFailback(mTask.getHashCode());
        return null;
    }
    finally {
        if (os != null) try {os.close();} catch (IOException e) {;}
        if (conn != null) conn.disconnect();
    }

    mTask.setSendedState(true);
    return null;
}

protected void onPostExecute(JSONObject result) {
    mTask.setSendingState(false);
    if (result == null) return;
    if (mEvent != null)
        mEvent.OnEvent(result);
}}

Я уже добавил параметр URL "time", время ожидания и закрытие соединений.Помогите мне, пожалуйста, потому что я не знаю, что еще можно сделать, чтобы решить эту проблему.

PS: сайт работает хорошо из одной локальной сети с 10+ пользователями без приложения для Android.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...