gpt4 book ai didi

java - 监听不同的客户端(java)

转载 作者:行者123 更新时间:2023-12-02 11:10:58 25 4
gpt4 key购买 nike

我想开发一个处理多个客户端的程序。人们应该能够在程序开始时有两个选择。他们应该能够:

  1. 等待某人选择他们做一些事情*(我对这些事情没有问题)*
  2. 从等待的人中进行选择。

一旦客户从等待名单中选择某人,他们的程序部分就应该开始运行。而第 1 组的其他人仍应等待。我的问题是我不知道该怎么做。我相信我应该创建不同的端口,以便我们的服务器可以监听不同的客户端并仅响应连接在一起的客户端。

问题是,如果我更改服务器端口,如何让其他使用旧端口的人继续并仍然监听他们?我在服务器中尝试了类似下面的内容

while (true) {
port=p.getPort();//this gives us an empty port everytime
//we call it(it's from an array in a class i made)
listener = new ServerSocket(port);
new Handler(listener.accept()).start();
}

问题是一旦我们更改服务器端口,它就会杀死其他端口还如何告诉服务器何时监听每个端口。我很困惑,如果有人能帮助我,我将不胜感激

最佳答案

您不需要每次都更改端口 - 同一端口上可以发生多个连接 ( How do multiple clients connect simultaneously to one port, say 80, on a server? )。

通常要接受无限数量的客户端,您需要创建一个新线程,该线程将循环 accept 函数 ( https://docs.oracle.com/javase/7/docs/api/java/net/ServerSocket.html#accept() ),该函数返回一个套接字,使您能够与之通信客户。然后,您可以使用这个特定的客户端套接字启动一个新线程并监听您想要的任何内容。

它可以像这样(不是真正的实现):

serverSocket = new ServerSocket(port);
thread = new Thread(listeningFunc);
thread.start()

listeningFunc() {
while(true) {
newClientSocket = serverSocket.accept() // This blocks the thread until a client connects
clientThread = Thread(new ListenClient(newClientSocket)); // A new thread is created for each new clients
clientThread.start()
}
}

ListenClient implements Runnable {
public ListenClient(Socket clientSocket) {
//Constructor
}

@Override // Override run function which is called on thread start
public void run() {
// Wait for interactions from the client
}
}

希望这有帮助

关于java - 监听不同的客户端(java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50625940/

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