我想开发一个处理多个客户端的程序。 人们应该能够在程序开始时有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();
}
问题是,一旦我们更改服务器端口,它就会杀死其他端口 如何告诉服务器何时收听每个端口。 我很困惑,如果有人能帮助我,我会感激不尽
答案 0 :(得分:1)
您不需要每次都更改端口 - 在同一端口(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
}
}
希望这有帮助