Серверные сокеты, мульти-клиент, по 1 линии каждый - PullRequest
0 голосов
/ 17 ноября 2011

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

Что касается части чтения, кажется, что это зависает послечтение одной строки:

while ((fromClient = in.readLine()) != null) {

, и это зависает перед чтением чего-либо:

fromClient = in.readLine();

Ответы [ 3 ]

1 голос
/ 17 ноября 2011

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

То есть вам нужно использовать java.nio для этого, потому что вызов readLine() будет блокировать чтение, пока не будет достигнут конец строки. (поэтому, если вы хотите использовать readLine(), вам понадобится поток для каждого клиента)

Вероятно, вам придется расширить пример, чтобы сохранить буфер для каждого клиента и отслеживать его до конца строки.

1 голос
/ 17 ноября 2011

Просто измените while на if.readLine() блокируется до тех пор, пока не будет прочитана полная строка или узел не закрыл соединение.Если это блокирует попытку прочитать только одну строку, это ставит под сомнение ваше довольно странное требование.Если один клиент работает медленно, это замедлит работу всей системы.Вы уверены, что вам нужно это сделать?Вы понимаете, что вы можете читать со всех клиентов одновременно через потоки?

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