прослушивание разных клиентов (java) - PullRequest
0 голосов
/ 31 мая 2018

Я хочу разработать программу, которая работает с несколькими клиентами.люди должны иметь возможность иметь 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();
        }

Проблема в том, что как только мы меняем порт сервера, он убивает другие порты, а также как сообщить серверу, когда прослушивать каждый порт.Я так растерялся, и если кто-нибудь может мне помочь, я буду благодарен

1 Ответ

0 голосов
/ 31 мая 2018

Вам не нужно каждый раз менять порт - с одного порта может происходить несколько соединений ( Как несколько клиентов одновременно подключаются к одному порту, скажем, 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
    }
}

Надеюсь, это поможет

...