首页 > 解决方案 > 听不同的客户(java)

问题描述

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

  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();
        }

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

标签: javaportserversocket

解决方案


您不需要每次都更改端口 - 多个连接可以发生在同一个端口上(多个客户端如何同时连接到服务器上的一个端口,比如 80?)。

通常要接受不定数量的客户端,您需要创建一个新线程来循环该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
    }
}

希望这可以帮助


推荐阅读