我有這個簡單的服務器腳本。我此腳本的目標是:Python套接字(簡單服務器腳本)
- 等待客戶端連接
- 接收來自客戶端的按摩,直到客戶端斷開
- 一旦客戶端斷開連接,等待另一個客戶端連接
- 享受按摩,直到客戶端斷開
- 重複...
import socket
server_socket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
server_socket.bind(("",5000))
server_socket.listen(5)
print "Awaiting Client connection"
client_socket, address =server_socket.accept()
print "Connection established.. with ",address
while True:
data=client_socket.recv(512)
if not data:
client_socket.close()
print "Client disconnected, Awaiting new connections..."
client_socket, address =server_socket.accept()
print "Connection from ",address
else:
print "RECIEVED:",data
我的問題是即使腳本似乎是工作,當我在一對電腦進行測試,我注意到,它收到來自客戶端的連接後,即line no 7
print "Connection established.. with ",address
python shell窗口似乎沒有響應(如果我嘗試移動shell窗口,則不響應)直到客戶端發送任何消息。
據我所知,如果沒有來自客戶端的傳入消息,client_socket.recv(512)
將只等待來自客戶端的數據。
但爲什麼它變得沒有反應? 爲了讓事情更清晰,
-The腳本工作得很好(它接收數據,並從屏幕打印出來&等待,如果客戶端斷開連接的新的連接)在控制檯窗口
-the光標停止閃爍
- 當我試圖走動控制檯窗口,它變得反應遲鈍和窗戶給我留言「該程序停止響應」
的'recv'方法阻止 - 見http://stackoverflow.com/questions/9770567/python-tcp-socket-blocks-on-recv-method。 – leon