Python: клиент-сервер. Я хочу ограничить количество клиентов, взаимодействующих с сервером, определенным числом в определенный момент времени, но не повезло - PullRequest
0 голосов
/ 26 февраля 2019

Я хочу ограничить количество клиентов, взаимодействующих с моим сервером в любой данный момент времени, до 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)

Возникла проблема:

  1. Хотя согласно коду, когда количество> 4, т.е. начиная с 5-го соединения и далее, любая дальнейшая попытка соединения должна быть ограничена.

Но я получаю ограничение и вижу следующее сообщение об ошибке только от 6-го клиента:

ConnectionRefusedError: [Errno 111] Connection refused
Ограничение публикации, когда клиент отключается, новый клиент по-прежнему не может войти в систему.похоже, что экземпляр закрытого сокета все еще подсчитывается.

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

Но я каким-то образом не могу выполнить эти требования с помощью своего кода.

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

...