gpt4 book ai didi

java - 客户端断开连接后,如何从服务器中删除客户端用户名?

转载 作者:行者123 更新时间:2023-12-01 09:41:36 26 4
gpt4 key购买 nike

我在我的系统的服务器中创建了一个数组列表,其中存储每个用户的名称。这是在客户端中输入的,然后通过打印机发送到服务器。但是,我希望当客户端与套接字断开连接时更新此列表,并删除他们输入的用户名。更新后的用户名列表必须显示在现有客户端和服务器上。

服务器:

do
{
//Wait for client.
client = serverSocket.accept();
in = new BufferedReader(
new InputStreamReader(client.getInputStream()));
out = new PrintWriter(
client.getOutputStream(),true);
userNames.add(in.readLine()); //Adds to the userNames array based read in from the client
System.out.println("---User List---");
for(int size = 0; size < userNames.size(); size++)
{
System.out.println(userNames.get(size));
}
out.println("Welcome, the following users are connected...");
out.println(userNames);
handler = new ClientHandler(client);
handler.start();
}while (true);

客户:

do
{
System.out.print("Please enter a username:");
Users user = new Users(keyboard.nextLine());
output.println(user.username);
System.out.println(in.readLine() + "\n");
System.out.println(in.readLine());
System.out.print("\nEnter message ('QUIT' to exit): ");
message = keyboard.nextLine();
output.println(message);
if (!message.equals("QUIT"))
{
response = networkInput.nextLine();
System.out.println("\n" + response);
output.println(user.username);
}
}while (!message.equals("QUIT"));

最佳答案

Andrey 是正确的,您需要检测套接字关闭。但您需要在代码中添加更多逻辑。

我希望 ClientHandler.start() 启动一个新线程,该线程具有循环并从客户端读取数据/向客户端写入数据。套接字关闭检测可能会在此线程中实现。 ClientHandler 不知道发起连接的用户 user。因此,可以对代码进行一些更改以使 ClientHandler 了解用户。

String userName = in.readLine(); 
userNames.add(userName);
handler = new ClientHandler(client, userName);
handler.start();

或者也许更好 - 在 ClientHandler 中读取用户名

handler = new ClientHandler(serverSocket.accept());
...
ClientHandler(ServerSocket s) {
// get stream and read username here
// add username to list

您将需要一个用于同步用户存储的类,以便允许从多个 ClientHandler 实例进行安全访问。当 ClientHandler 检测到断开连接时,它可以轻松地从存储中删除用户名并启动触发用户。

您不仅需要在用户存储中存储名称,因为您需要通知所有客户端连接丢失,因此您需要存储 Activity ClientHandler 实例的列表以通知所有客户端。

关于java - 客户端断开连接后,如何从服务器中删除客户端用户名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38411847/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com