Итак, моя проблема в том, что у меня есть клиент с 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 () в меню (этот пользователь использует для просмотра приложения).Так что я действительно не знаю, как решить эту проблему, если вы, ребята, знаете какое-то решение для этого!
Спасибо.