2016-01-12 5 views
1

Я создал приложение для чата с сервером и клиентами. Я хочу ограничить подключение клиентов к определенному числу, скажем 2. Я пытался это сделать, определив свой серверный сервер как somevar = new ServerSocket (порт, 2). Проблема заключается в том, что клиент отключает новый клиент, который еще не может войти в систему (после достижения предела в 2 соединения), похоже, что закрытые сокеты подсчитываются как подключенные сокеты. У кого-нибудь есть идея решить эту проблему?ограничить определенное количество клиентов для подключения к серверу

+4

можете ли вы вставить код, чтобы показать нам, какое действие очистки вы выполняете, когда клиент отправляет запрос на разъединение? – Kakarot

ответ

2

Держите след всех клиентов, подключенных в массиве

Client[] clients=new Clients[4]; 

Теперь, когда клиент отсоединяется вы должны сделать, что клиент пространство на массив нуля и до этого закройте все открытые потоки для этого пользователя. Создание пробела в массиве откроет его для новых клиентов.

+0

Я думаю, что ServerSocket (порт, clientQueueSize) позаботится об этом, и нам не нужен более плавный код для управления входящими клиентами. – Kakarot

+0

хорошо, что является основной причиной, по которой я предлагаю отслеживать клиентов и выполнять ручную очистку ... Потому что, как оказалось, использование очереди не очищает пространство в очереди, когда клиент отключается ... –

+0

спасибо человеку, который решил мою проблему @AmitKothiyal – gil

1

Я создал приложение чата с сервером и клиентами. Я хочу ограничить подключение клиентов к определенному числу, скажем 2. Я пытался это сделать, определив свой серверный сервер как somevar = new ServerSocket (порт, 2).

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

вопрос, когда клиент разрывает новый клиент еще не может войти в систему (после достижения предела 2 соединений)

Это не правильно.

кажется, что закрытые розетки считаются подключенными розетками. У кого-нибудь есть идея решить эту проблему?

Просто счет. Увеличивайте счетчик, когда вы принимаете, и уменьшаете, когда вы закрываете это соединение.