Мне нужно создать приложение, в котором клиент может отправить сообщение (в виде объекта) на сервер, который затем передаст сообщение другим клиентам.Передача объекта нескольким клиентам через сокет java
У меня возникли проблемы с ObjectInputStream.readobject()
для клиентов, получающих сообщения с сервера. В потоке, прослушивающем сервер на стороне клиента, печать «ожидание считывания объекта» печатается в бесконечном цикле, но «читать объект» и «печатать» никогда не отображается. Почему это?
Резьба на стороне клиента прослушивания сервера
while (!terminate){
try {
System.out.println("Waiting to read object");
ChatMessage msg = (ChatMessage) is.readObject();
System.out.println("Read object");
System.out.println(msg.toString());
System.out.println("Printed");
} catch (IOException e) {
e.getMessage();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
Запись на стороне клиента сервера
while(!terminate){
String message = scanner.nextLine();
if(message.equals("logout")){
terminateProgram();
return;
}
ChatMessage msg = new ChatMessage(name,message);
try {
os.writeObject(msg);
os.flush();
} catch (IOException e) {
System.err.println("Sending message to server failed: " + e.getMessage());
}
}
Чтение сообщений от клиента и передавать их (на стороне сервера)
while (!terminate) {
try {
Object obj = is.readObject();
if (obj instanceof ChatMessage) {
ArrayList<Socket> sockets = SingletonModel.getInstance().getSockets();
for (Socket socketOne : sockets) {
if (socket != socketOne) {
System.out.println("We here");
os = new ObjectOutputStream(socketOne.getOutputStream());
os.writeObject(obj);
os.flush();
System.out.println("We done");
}
}
Правильное обращение с «IOException» на клиенте может быть хорошим началом , –