gpt4 book ai didi

java - 用一台服务器处理多个客户端

转载 作者:行者123 更新时间:2023-12-01 13:17:02 25 4
gpt4 key购买 nike

我尝试使用 Java 中的套接字连接到多个客户端。一切似乎都正常,但问题是,服务器只监听第一个客户端。如果有多个客户端,服务器可以向它们发送所有消息,但他只能监听来自第一个客户端的消息。我尝试了这一切(我从昨天开始就遇到这个问题)。所以我很确定,故障一定出在“ClientListener”类中。

说明:有一个包含客户端的列表(与字符串进行通信的连接)。 GUI 中有一个列表,我可以在其中选择我想要与哪个客户端进行通信。如果我更改客户端,变量 currentClient (int) 会切换到另一个数字

networkClients 是一个 ArrayList,其中“存储”了所有不同的连接。

第一个连接的客户端和其他客户端一模一样,没有什么特别的。当变量 currentClient 设置为 0(默认)时,他被调用。变量切换正在工作。就像我说的,如果我向所有客户端发送订单,所有客户端都会给我一个响应,但服务器(ClientListener)只听到 networkClients.get(0)。

class ClientListener implements Runnable {
String request;

@Override
public void run() {
try {
while (networkClients.size() < 1) {
Thread.sleep(1000);
}

//***I'm pretty sure, that the problem is in this line
while ((request = networkClients.get(currentClient).getCommunicationReader().readLine()) != null) {
//***
myFileList.add(new MyFile(request));
}
}
} catch (Exception e) {
e.printStackTrace();
}
}

我希望有人能帮助我。我尝试了很多方法,但没有任何效果。

编辑:就像我在代码示例中所写的那样,while循环是否有可能无法切换“currentClient”的数量(由另一个线程处理)?我在测试类中测试/模拟了类似的东西,结果是,while 循环当然可以更新其中的状态(这意味着,如果变量在 while 循环的 () 中发生变化,它当然会每次重复后检查)。

最佳答案

您应该看看multithreading .

您的服务器程序应该由以下内容组成:

- The main thread
- A thread that handles new connections.
(Upon creating a new connection, start a new thread and pass the connection on to that thread)
- A thread for each connected client, listening to the each client separately

看一些示例,例如:(1) (2)

关于java - 用一台服务器处理多个客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22388180/

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