如何正确管理最大数量的连接客户端-Python客户端服务器TCP



我正在使用Python 3.6开发的tcp服务器和tcp客户端应用程序
一旦建立了连接,服务器就会向客户端发送数据,并从客户端本身接收数据。

服务器应接受最大数量的客户端。我想要的是,当连接的客户端数量达到最大值时,服务器不接受任何其他连接,客户端会收到通知并中止。

这里的服务器代码:

class ThreadedServer(object):
def __init__(self, host, port, max_clients):
self.host = host
self.port = port
self.max_clients = max_clients
self.connected_clients = 0
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
self.sock.bind((self.host, self.port))
def listen(self):
self.sock.listen(5)

while True:

if self.connected_clients >= self.max_clients:
print("Maximum number of clients reached")
continue

client, address = self.sock.accept()

# keep track connected clients
self.connected_clients += 1
# start a new thread to send data to the connected client
# start a new thread to receive data to the connected client

if __name__ == "__main__":
HOST = "xxx.xxx.xxx.xxx"
PORT = xxxx
MAX_CLIENTS = x
ThreadedServer(HOST, PORT, MAX_CLIENTS).listen()

客户端代码如下:

class ThreadedClient(object):
def __init__(self, host, port):
self.host = host
self.port = port
self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
def send(self):
self.sock.connect((self.host, self.port))

# start a new thread to receive data to the server
# start a new thread to send data to the server
if __name__ == "__main__":
HOST = "xxx.xxx.xxx.xxx"
PORT = xxxx
ThreadedClient(HOST, PORT).send()

在达到连接客户端的最大数量之前,一切正常
当一个"额外的";客户端启动后,它不会(正确地(从服务器接收任何内容,但它开始尝试发送数据。由于服务器不接受连接,因此未接收到数据。

我想找到一种方法来了解服务器在启动新线程之前不接受客户端连接的情况,以便正确管理这种情况。

在实际检索客户端之前调用client.close()。这意味着最后一个被接受的客户端仍将在客户端变量中。此连接将关闭,而不是新连接。

def listen(self):
self.sock.listen(5)

while True:

client, address = self.sock.accept() # this line needs to be before the if
if self.connected_clients >= self.max_clients:
print("Maximum number of clients reached")
client.close()
continue

# keep track connected clients
self.connected_clients += 1
# start a new thread to send data to the connected client
# start a new thread to receive data to the connected client

最新更新