【发布时间】:2022-01-07 11:14:25
【问题描述】:
我有以下 Socket 服务器可以在 Raspberry 中运行。
我可以连接到它,发送命令,它会回复命令。
现在我希望,当我发送命令 RESET 时,Socket 断开连接,Raspberry 返回到侦听状态,接受新连接。
但是,地址似乎没有正确释放,操作系统抛出“地址已在使用”异常。
Reconnecting....
OSError: [Errno 98] Address already in use
import socket
class SocketController:
def __init__(self):
self.s = None
self.conn = None
self.address = None
def connect(self):
host = ''
port = 5560
self.s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
self.s.bind((host, port))
self.s.listen(1)
self.conn, self.address = self.s.accept()
def disconnect(self):
self.conn.close()
self.s.close()
def rx(self):
data = self.conn.recv(1024).decode('utf-8')
if data == "RESET":
self.disconnect()
print("Reconnecting....")
self.connect()
else:
self.conn.sendall(str.encode(data))
if __name__ == '__main__':
s = SocketController()
s.connect()
while True:
rxData = s.rx()
关闭连接并重新开始收听的正确方法是什么?
【问题讨论】:
标签: python-3.x sockets python-sockets