我遇到了python脚本的问题,我没有写自己,而且我对python完全陌生。该脚本在Raspberry Pi上运行并侦听端口8080(套接字)。客户端可以发送诸如" reboot()"之类的命令。问题是当客户端关闭连接时,脚本不再接受新连接并执行命令。
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
s.bind(("", 8080))
s.listen(1)
conn = s.accept()
while True:
data = conn[0].recv(1024)
if data:
command = ""
args = ""
if "(" in data and ")" in data:
command = data[:data.index("(")]
args = data[data.index("(") + 1:data.index(")")]
if "," in args:
arglist = args.split(",")
else:
arglist = args
if command == "reboot":
os.system("reboot")
elif command == "shutdown":
os.system("shutdown -h now")
elif command == "reset":
obja.reset()
objb.reset()
else:
conn[0].sendall("Command doesn't exist!")
脚本在启动时运行,不会终止。这里的最后一行也是原始脚本中的最后一行。在我发布的行之上还有一些代码,但我认为它与套接字问题无关。我尝试将前5行放在While-Loop中,但这并不起作用。 我应该如何重新编写代码,以便在客户端关闭连接时继续执行?非常欢迎任何帮助。
彼得
答案 0 :(得分:1)
您需要在while
循环中放入的代码以conn = s.accept()
开头。
您只想设置套接字并拨打bind
/ listen
一次。但是,您希望捕获ConnectionClosed
之类的异常,并在发生时再次调用accept
。为此,您需要在try
/ except
中添加新添加的while循环体。 except
块需要捕获客户端失去连接时发生的任何类型的异常。
祝你好运,编码愉快!