为什么不能将多个客户端同时连接到服务器?蟒蛇

时间:2019-03-13 19:58:12

标签: python-3.x sockets

所以可以说我有一个server.py和client.py,其中包含以下代码:

server.py

import socket

def listen():
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    host = "127.0.0.1"
    port = 5555

    s.bind((host, port))
    s.listen(128)

    print("LISTENING FOR INCOMING CONNECTIONS")

    c, addr = s.accept()
    print("GOT CONNECTION FROM", addr)

    while True:
        data = c.recv(1024)
        data = data.decode("utf-8")
        data = data.upper()
        c.send(data.encode("utf-8"))
listen()

和client.py

import socket

def connect():
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
    host = "127.0.0.1"
    port = 5555

    s.connect((host, port))

    print("CONNECTED TO HOST")

    while True:
        command = input("command> ")
        s.send(command.encode("utf-8"))
        data = s.recv(1024)
        print(str(data.decode("utf-8")))
connect()

现在,如果我断开客户端连接并尝试重新连接到服务器,它将无法正常工作。 (由于无法正常工作,我的意思是无法建立连接)

1 个答案:

答案 0 :(得分:0)

listen的{​​{1}}函数中,您仅调用一次server.py函数。必须为您要接受的每个客户端连接调用accept。要解决您的问题,您可以将函数的后半部分循环放置:

accept

表示一次只能连接1个客户端。

我强烈建议您不要看Python标准库中的SocketServer,而不是自己编写这种类型的代码。该库负责样板监听/接受工作,还具有一些高级功能,可让您轻松地同时处理多个客户端连接(如果需要)

https://docs.python.org/3/library/socketserver.html#socketserver-tcpserver-example