听不同的客户(java)

时间:2018-05-31 13:51:07

标签: java port serversocket

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

  1. 等待某人选择他们做一些事情*(我对这些东西没有问题)*
  2. 从等待的人中选择。
  3. 一旦客户从等待名单中选择某人,他们的部分程序就应该开始运行。和第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();
            }
    

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

1 个答案:

答案 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
    }
}

希望这有帮助