0
我想寫打印發送給它的數據,或者退出,如果數據是「跳槽」,「退出」或「停止」一個簡單的服務器程序:套接字連接不會關閉?
HOST = ""
PORT = 37720
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind((HOST, PORT))
server.listen(1)
while(1):
conn, addr = server.accept()
data = conn.recv(1024)
if not data: break
inData, inUrl = json.loads(data)
if inData == "quit" or inData == "exit" or inData == "stop":
print("Quitting")
conn.close()
break
else:
conn.send("Received")
print(inData)
它做什麼,我期待,只是當我嘗試一旦它的退出再次運行服務器,我得到:
Traceback (most recent call last):
File "./s", line 14, in <module>
server.bind((HOST, PORT))
File "/usr/lib/python2.7/socket.py", line 224, in meth
return getattr(self._sock,name)(*args)
socket.error: [Errno 98] Address already in use
我想這意味着連接沒有關閉。我如何關閉它以防止這種情況發生?我嘗試了conn.close()
,但它沒有解決任何問題。
作爲一個便箋,您的代碼確實沒有工作。 [套接字是字節流,而不是消息流](http://stupidpythonideas.blogspot.com/2013/05/sockets-are-byte-streams-not-message.html)。沒有理由相信你從'conn.recv'返回的每個緩衝區都是單個消息;它可能是一條消息,或六條單獨的消息。它可以在本地主機上進行簡單的測試,但是在真正部署它時(或者更糟糕的是,會在1%的時間內失敗,僅僅使其無效但不足以進行調試)失敗90%。 – abarnert