我有小型服务器和客户端Python脚本,客户端发送一个字符串,服务器以相反的方式响应。客户端输入退出字符串时,客户端退出,然后服务器退出。如何在不断检查输入线程的同时运行后台程序?
我希望服务器的“接收,反向,发送”过程在后台运行,而程序不断检查标准输入的退出字符串。
我试过使用threading
,但由于阻塞,许多套接字调用导致它无法正常工作。
这样你就可以知道我已经做了什么。
server.py:
import socket
from time import sleep
sock = socket.socket()
sock.bind(("127.0.0.1",12346))
sock.listen(3)
print "Waiting on connection"
conn = sock.accept()
print "Client connected"
while True:
m = conn[0].recv(4096)
if m == "exit":
sleep(1)
break
else:
conn[0].send(m[::-1])
sock.shutdown(socket.SHUT_RDWR)
sock.close()
client.py:
import socket
sock = socket.socket()
sock.connect(("127.0.0.1",12346))
while True:
s = raw_input("message: ")
sock.send(s)
if s == "exit":
print "Quitting"
break
print sock.recv(4096)
sock.shutdown(socket.SHUT_RDWR)
sock.close()
“接收,反向,发送”看起来像是花了很短的时间,在我看来,你为什么要让它在后台运行? – justhalf
因为我看不到有什么办法在同一个进程中“接收,反向,发送”和“获取用户输入”,因为''raw_input()''会阻塞,直到它接收到中断数据包流的输入为止。 我有两个想法,我不想付诸行动: 给予客户端杀死服务器的能力,或限制''raw_input()''阻塞(超时)的时间长度 – lightandlight
我没有理解。所以你想要的是将两个脚本“server.py”和“client.py”合并成一个脚本,然后运行一个脚本?或者你只是想在后台运行“server.py”(在Unix中可以使用'python server.py&'来完成)? – justhalf