我有小型服務器和客戶端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