Установите локальный порт HttpClient в приложении для Android

Im мое приложение для Android. У меня есть клиент, который должен выполнять несколько HTTP-запросов в секунду на сервер.

Я достигаю этого следующим образом:

        public class myclient implements Runnable {

           private HttpClient httpClient = null;
           private HttpParams params = null;
           private HttpGet httpRequest;

           myclient () {
                httpClient = new DefaultHttpClient();
                params = httpClient.getParams();
                httpRequest = new HttpGet(request);

                HttpConnectionParams.setConnectionTimeout(params, 60000);
                HttpConnectionParams.setSoTimeout(params, 60000);
                ...
           }

           @Override
           public void run() {

                HttpResponse response = httpClient.execute(httpRequest);
                HttpEntity entity = response.getEntity();

                BufferedHttpEntity bufferedHttpEntity = new  BufferedHttpEntity(entity);

                InStream = bufferedHttpEntity.getContent();
           ...
           }
    }

Теперь проблема: в то время как конечным портом каждого запроса является порт 80, локальный порт меняется при каждом запросе. Это вызывает некоторые проблемы с брандмауэрами. Есть ли способ сохранить локальный порт постоянным? Я решил эту проблему в приложении .NET, установив для локального порта фиксированное значение. Но здесь это кажется невозможным. Более того, я предполагаю, что изменение локального порта означает новое TCP-соединение: почему соединение не сохраняется?


person peregrinus    schedule 09.03.2018    source источник
comment
То, что каждый запрос открывает новое TCP-соединение, означает, что либо сервер не разрешает повторное использование соединения (маловероятно), либо вы неправильно используете библиотеку http apache, поэтому повторное использование соединения невозможно. Ваши запросы должны выглядеть так: stackoverflow.com/a/31659073/150978   -  person Robert    schedule 09.03.2018
comment
means a new TCP connection: why the connection is not preserved? Http — это протокол без установления соединения.   -  person greenapps    schedule 09.03.2018
comment
@greenapps Да, вы правы, но даже если Http не требует установления соединения, вы должны иметь возможность использовать одно и то же TCP-соединение, поскольку TCP ориентирован на соединение. Проблема также решена здесь: mttkay.github.io/blog/2013/03/02/ Я реализовал свои запросы как с классами HttpClient, так и с HttpUrlConnection, но в обоих случаях я не могу сохранить соединение для разных запросов Http.   -  person peregrinus    schedule 09.03.2018
comment
У вас есть доступ к базовому сокету?   -  person greenapps    schedule 10.03.2018
comment
Я использую Android API. Насколько мне известно, я могу выполнять http-запросы только с классами HttpClient и HttpUrlConnection. Моя цель - поддерживать постоянный локальный порт, и я могу добиться этого: а) оставив соединение открытым (это также зависит от сервера), б) установив локальный порт (предпочтительнее). Возможно, единственный способ - использовать JNI.   -  person peregrinus    schedule 12.03.2018