syxme
@syxme

Как сделать keep-alive запросы на сервер?

Пытаюсь сделать 2 https запроса
SSLSocket socket = (SSLSocket) ssl.createSocket("site.net",443);
      socket.setReuseAddress(true);
      socket.setKeepAlive(true);
      socket.setTcpNoDelay(true);
      socket.startHandshake();
      socket.getOutputStream().write(testRequest());
      InputStream input = socket.getInputStream();
      int res = 0;
      byte[] buffer = new byte[1024*64];
      while (((res = input.read(buffer, 0, buffer.length)) != -1)&&!Thread.interrupted()) {
           System.out.println(new String(buffer,0,res, Charset.defaultCharset()));
       }
      // вернул всё как положено, в заголовках ответа сервера keep-alive поддерживается

      socket.getOutputStream().write(testRequest()); // Ещё один запрос
      while (((res = input.read(buffer, 0, buffer.length)) != -1)&&!Thread.interrupted()) {
           System.out.println(new String(buffer,0,res, Charset.defaultCharset()));
       }
      // Но тут уже ничего не приходит ((


В чём может быть дело ?
Может быть после того как я получил все данные нужно как то сказать серверу что я закончил чтение ?
  • Вопрос задан
  • 84 просмотра
Решения вопроса 1
syxme
@syxme Автор вопроса
Отбой друзья)) Поспал, продебажил и увидел что первый цикл заблокирован функцией read ибо соединение не закрыто и -1 не возвращается.
Решение проблемы:
boolean reading = true;
while (reading&&!Thread.interrupted()) {
    reading = ((res = input.read(buffer, 0, buffer.length)) != -1);
    if (buffer[res]==0x0){
        reading = false;
    }
    System.out.println(new String(buffer,0,res, Charset.defaultCharset()));
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Bell Integrator Ульяновск
До 400 000 ₽
Bell Integrator Хабаровск
До 400 000 ₽
Bell Integrator Ижевск
До 400 000 ₽
19 апр. 2024, в 08:46
5000 руб./за проект
19 апр. 2024, в 03:52
1000 руб./за проект