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