Получать несколько объектов с помощью objectinputstream, но обновлять их только после отправки objectoutputstream - PullRequest
0 голосов
/ 31 декабря 2018

Итак, моя проблема в том, что у меня есть клиент с Runnable, который читает объекты в фоновом режиме из сокета.На сервере я отправляю несколько раз объекты, такие как обновления уведомлений и т. Д., С помощью writeUnshared, но клиент получает их только тогда, когда я отправляю запрос обратно на сервер с помощью writeUnshared.

\ ClientThread.java \

public class ThreadClientInFromServer implements Runnable {
Socket socket;
ClientData clientData;

public ThreadClientInFromServer(Socket socket, ClientData clientData) {
    this.socket = socket;
    this.clientData = clientData;
}

@Override
public void run() {
    ObjectInputStream in;
    ObjectOutputStream out;

    out = clientData.getOut();
    in = clientData.getIn();
    while (!socket.isClosed()) {
        try {

            Object object = in.readObject();

                clientData.updateData(object);

        } catch (IOException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

SendRequestClient.java Только когда я отправляю этот запрос, он обновляет и приходит обновления, уведомления и т. Д.

public void sendRequest(Request request) {

    try {
        out.writeObject(request);
        out.flush();
        out.reset();

    } catch (IOException e) {
        System.out.println("[ERROR] ON SEND REQUEST!");
        return;
    }
}

Например, на сервере (KEEPALIVETCP.java) он не получает.

public class KeepAliveTCP implements Runnable {
ServerModel serverModel;

public KeepAliveTCP(ServerModel serverModel) {
    this.serverModel = serverModel;
}

@Override
public void run() {
    Request request = new Request(null, Constants.ACK);
    while (!serverModel.getSocket().isClosed()) {
        try {
            for (SocketModel clients : serverModel.getModelClientes()) {
                if (clients.getNome() != null) {
                    clients.getOut().writeUnshared(request);
                    clients.getOut().flush();
                }
            }
            sleep(5000);
            watchWhoFails();
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Заранее спасибо !!!

РЕДАКТИРОВАТЬ: Таким образом, я пытался найти решение и найти моего клиента, блокирующего поток (ThreadClientInFromServer), когда он использует scanner.next () в меню (этот пользователь использует для просмотра приложения).Так что я действительно не знаю, как решить эту проблему, если вы, ребята, знаете какое-то решение для этого!

Спасибо.

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