我需要創建一個應用程序,其中客戶端可以將消息(以對象的形式)發送到服務器,然後服務器將消息廣播到其他客戶端。通過套接字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可能是一個好的開始。 –