所以可以说我有一个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()
现在,如果我断开客户端连接并尝试重新连接到服务器,它将无法正常工作。 (由于无法正常工作,我的意思是无法建立连接)
答案 0 :(得分:0)
在listen
的{{1}}函数中,您仅调用一次server.py
函数。必须为您要接受的每个客户端连接调用accept
。要解决您的问题,您可以将函数的后半部分循环放置:
accept
这将表示一次只能连接1个客户端。
我强烈建议您不要看Python标准库中的SocketServer,而不是自己编写这种类型的代码。该库负责样板监听/接受工作,还具有一些高级功能,可让您轻松地同时处理多个客户端连接(如果需要)
https://docs.python.org/3/library/socketserver.html#socketserver-tcpserver-example