как заставить сервер принимать новое соединение при обработке других вещей в Java - PullRequest
0 голосов
/ 05 марта 2010

Я из Эфиопии, поэтому прошу прощения за мой английский

Я разрабатывал многозадачное серверное / клиентское приложение, и у сервера есть собственный пользовательский интерфейс, который хранит список всех подключенных клиентов, проблема в

ss = new ServerSocket( port );

while (true) {
// Grab the next incoming connection

 s = ss.accept();

ss.accept ();заблокировать весь процесс, и я не могу получить доступ к другим функциям сервера.пользовательский интерфейс сервера полностью завис, даже если сервер принимает новых клиентов, а клиентская сторона работает отлично.

, что мне делать, чтобы сервер принял новое соединение при обработке других вещей

Ответы [ 3 ]

1 голос
/ 05 марта 2010

Есть два (популярных) способа сделать это:

  1. Основной поток, содержащий цикл блокировки, ожидающий клиентов. Этот основной поток порождает new Thread, когда клиент accept ed.

  2. Java Новый ввод / вывод. Все обрабатывается в основном потоке. См. http://rox -xmlrpc.sourceforge.net / niotut / index.html

Также: вы указываете, что ваше серверное приложение имеет интерфейс пользователя. Пользовательский интерфейс должен работать в другом потоке (нить диспетчера событий, EDT), чем на сервере.

0 голосов
/ 28 декабря 2012

Так что поставь этот Listener (в метод) и используй TaskFactory. TaskFactory выполнит метод в отдельном потоке, и у вас не будет этой проблемы

0 голосов
/ 05 марта 2010

Вы должны создать поток и вызвать accept там

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...