我使用套接字编写客户端 - 服务器聊天。请帮助我理解如何将当前注册用户列表从服务器发送到客户端,并在列表更改时更新它。我读过this similar post但钢铁并不了解如何做到这一点。我使用 BufferedReader 和 PrintWriter 流来发送和接收消息。我不想在客户发送消息时随时发送用户列表。
我将地图中的用户列表保留为服务器端的密钥集。
public class Server{
private final Map<String, ServerThread> clients = Collections.synchronizedMap(new TreeMap<>());
//.....
}
我在一个论坛上读过,如果使用序列化,那么所有可序列化的类都必须是发送方和接收方。但我不需要客户端的服务器类。
更新 如果我将使用 ObjectOutputStream / ObjectInputStream 而不是 BufferedReader 和 PrintWriter ,以下方法是否可用于区分用户名列表中的消息?
//code on client side:
Object received = input.readObject();
if (received instanceof List) {
List<String> users = (List) received;
//display users in JList
} else if (received instanceof String) {
String message = (String) received;
//display in JTextArea
}