簡體   English   中英

如何限制一個套接字的連接數?

[英]How to limit the number of connections to a socket?

根據我對這段代碼的理解:

server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
port = 45671
server_socket.bind(("localhost", port))
server_socket.listen(2) #focus on this line

是只有兩個客戶端可以與socket_server建立連接。

但是,我可以連接兩個以上的客戶端。

部分客戶端代碼:

HOST = 'localhost'
PORT = 45671
BUFSIZ = 1024
ADDR = (HOST,PORT)
client_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_sock.connect(ADDR)

*服務器與 select 庫一起使用,在我看來這不是問題......

如何限制客戶端與服務器的連接數?

如您的問題評論中所述, listen() arguments 的用途略有不同。

您必須自己管理連接。 一個例子可能是:

import socket
import logging

logger = logging.getLogger(__name__)


HOST = '127.0.0.1'  # Standard loopback interface address (localhost)
PORT = 8331        # Port to listen on (non-privileged ports are > 1023)

connections = []
MAX_CONNECTIONS = 2

with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as s:
    s.bind((HOST, PORT))
    s.listen()

    logger.info(f"Starting server on {HOST}: {PORT} ...")

    while True:
        conn, addr = s.accept()
        if len(connections) >= MAX_CONNECTIONS:
            conn.sendall(f"Connection overflow. Max amount is {MAX_CONNECTIONS}".encode())
            continue

        connections.append((conn, addr))

        logger.info(f"Client connected: {addr}")
        while True:
            data = conn.recv(1024)
            if not data:
                break
            conn.sendall(data)

不過,您必須編寫清理邏輯,以便您的connections數組不會保持關閉的連接。 而且,您必須對這些連接進行某種異步處理,因為在這種方法中,一次只能處理一個活動連接。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM