Я хочу ограничить количество клиентов, взаимодействующих с моим сервером в любой данный момент времени, до 4 (одновременно максимум 4 клиента).
Я написал приведенный ниже код на стороне сервера:
import select
import socket
import sys
host = 'localhost'
port = 2802
backlog = 5
maxsize = 1024
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind((host,port))
server.listen(backlog)
input = [server,]
running = 1 #set running to zero to close the server
count = 0
while running:
inputready,outputready,exceptready = select.select(input,[],[])
for s in inputready:
if s == server:
client, address = server.accept()
input.append(client)
count = count + 1
print('count:{}'.format(count))
if count>4:
print('Max connection reached!')
s.close()
input.remove(s)
else:
data = s.recv(maxsize)
if data:
print ('%s received from %s'%(data,s.getsockname()))
else:
s.close()
input.remove(s)
Возникла проблема:
- Хотя согласно коду, когда количество> 4, т.е. начиная с 5-го соединения и далее, любая дальнейшая попытка соединения должна быть ограничена.
Но я получаю ограничение и вижу следующее сообщение об ошибке только от 6-го клиента:
ConnectionRefusedError: [Errno 111] Connection refused
Ограничение публикации, когда клиент отключается, новый клиент по-прежнему не может войти в систему.похоже, что экземпляр закрытого сокета все еще подсчитывается.
Я хочу: при достижении максимально допустимого числа соединений, если 'n' клиенты отключаются, это позволит 'n' новымклиенты взаимодействуют с моим сервером.
Но я каким-то образом не могу выполнить эти требования с помощью своего кода.
Может кто-нибудь подсказать мне, где именно в моем коде я должен внести изменениявыполнить мои требования?