Как сделать принятый сокет, не блокирующийся в Java

Линт ПК может действительно сделать это. Один простой способ сделать это должно настроить, он для обнаружения просто неиспользованный включает файлы и игнорирует все другие проблемы. Это довольно просто - чтобы включить просто сообщение 766 ("Заголовочный файл, не используемый в модуле"), просто включать опции-w0 +e766 в командную строку.

тот же подход может также использоваться с похожими сообщениями такой как 964 ("Заголовочный файл, не непосредственно используемый в модуле") и 966 ("Косвенно включенный заголовочный файл, не используемый в модуле").

FWIW я записал об этом более подробно в сообщении в блоге на прошлой неделе в http://www.riverblade.co.uk/blog.php?archive=2008_09_01_archive.xml#3575027665614976318 .

5
задан Feedforward 16 October 2018 в 19:40
поделиться

4 ответа

Я ожидаю, что ваш код будет блокироваться при вызове accept, никогда не дойдя до вызова configureBlocking.

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

1
ответ дан 13 December 2019 в 22:10
поделиться

Две вещи:

  1. Почему вы не используете ServerSocket , если вы прослушиваете соединения?
  2. Если вы хотите принимать несколько клиентов, которые вам нужны для использования цикла.

Базовая структура мультиклиентного сервера:

while (true) {
  // accept connections
  // spawn thread to deal with that connection
}

Если проблема заключается в блокировке вызова accept () , то это то, что accept () выполняет: блокирует ожидание соединения. Если это проблема, я предлагаю вам создать отдельный поток для приема подключений.

См. Запись серверной части сокета .

8
ответ дан 13 December 2019 в 22:10
поделиться

Если вы ищете неблокирующие сокеты, я предлагаю использовать Selectors и ServerSocketChannels с пакетом NIO. .

http://java.sun.com/j2se/1.4.2/docs/guide/nio/

1
ответ дан 13 December 2019 в 22:10
поделиться

Если типичный блокирующий сокет не дает вам необходимой доступности (соединение каждые 100 мс кажется трудным). Вы должны посмотреть на неблокирующий сокет. Вот учебное пособие . Вы также можете посмотреть Apache MINA , чтобы упростить эту задачу.

0
ответ дан 13 December 2019 в 22:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: