По определению, UDP не имеет понятия «сессий», поэтому он не будет знать, сколько он в данный момент обрабатывает.
Вам нужно будет реализовать какое-то управление сессиями в своем коде, чтобы решить, когда клиент активен или неактивен, и для этого нужно выполнить действие.
Ниже приведен пример кода, в котором должно быть разрешено до пяти клиентов и срок его действия истекает через тридцать секунд.
bind_ip = '192.168.0.1' ## The IP address to bind to, 0.0.0.0 for all
bind_port = 55555 ## The port to bind to
timeout = 30 ## How long before forgetting a client (seconds)
maximum = 5 ## Maximum number of clients
###
import socket
import time
## Create the socket as an internet (INET) and UDP (DGRAM) socket
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
## Bind to the server address and port
sock.bind((bind_ip, bind_port))
## Make a dict to store when each client contacted us last
clients = dict()
## Now loop forever
while True:
## Get the data and the address
data, address = sock.recvfrom(1024)
## Check timeout of all of the clients
for addr in clients.keys():
## See if the timeout has passed
if clients[addr] < (time.time() - timeout):
## Expire the client
print('Nothing from ' + addr + ' for a while. Kicking them off.')
clients.pop(addr)
## Check if there are too many clients and if we know this client
if len(clients.keys()) > maximum and address not in clients.keys():
print('There are too many clients connected!')
continue
## Update the last contact time
clients[address] = time.time()
## Do something with the data
print('Received from ' + str(address) + ': ' + str(data))
Это ни в коем случае не самый эффективный способ сделать это, и служит только примером.
Связанное чтение: https://en.wikibooks.org/wiki/Communication_Networks/TCP_and_UDP_Protocols/UDP