SSLSocket получает и отправляет запросы без блокировки потока - PullRequest
0 голосов
/ 16 октября 2018

Я пытаюсь читать с сервера SSLSocket, мне нужно, чтобы клиент был открыт 24/7, Заметьте, я только делаю клиента, Сервер уже настроен, Я пытаюсь читать данные и отправлять данныес сервера. Как бы то ни было, когда я пытаюсь прочитать данные, он блокирует мой текущий поток, и я не могу ничего сделать после этого, так как цикл никогда не заканчивается, и если я делаю цикл, который завершает, программа возвращается.Я хочу, чтобы он всегда был открытым и продолжал получать входящий запрос, а затем отправлять запрос обратно в соответствии с тем, что я получаю, это то, что у меня сейчас есть.

private SSLSocketFactory sslsocketfactory = (SSLSocketFactory) SSLSocketFactory.getDefault();
private SSLSocket sslsocket = (SSLSocket) sslsocketfactory.createSocket(host, port);
private BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(sslsocket.getOutputStream()));
private InputStream is = sslsocket.getInputStream();

это глобальные переменные, которые я определил, и этоВот как я записываю данные на сервер

private void write_to_server(String date) throws IOException {
    writer.write(date);
    writer.flush();
}

и, наконец, именно так я получаю ответ, и именно здесь у меня возникает проблема.

public String getResponse() throws IOException {
    byte[] buffer = new byte[16384];
    String a = "";
    for (int b; ((b = is.read(buffer)) > 0); ) {
        a = new String(buffer, 0, b, StandardCharsets.UTF_8);
        Log(a);
    }
    return a;
}

Цикл никогда не заканчивается, вызываязастрявший поток, и даже если цикл завершится, программа просто вернется после этого, что приведет к завершению программы.Мне нужно знать, как настроить его так, чтобы он получал данные круглосуточно, а затем отправлял данные обратно после получения ответа.

...