【发布时间】:2014-09-24 18:45:21
【问题描述】:
我是 websocket 的初学者,我正在尝试使用 tornado 来达到这个目的。到目前为止,这是我的工作代码:
from tornado import websocket
from tornado import web
import tornado.ioloop
class EchoWebSocket(websocket.WebSocketHandler):
def open(self):
print "WebSocket opened"
def on_message(self, message):
self.write_message(u"You said: " + message)
print message
def on_close(self):
print "WebSocket closed"
def check_origin(self, origin):
return True
class MainHandler(tornado.web.RequestHandler):
def get(self):
self.write("Hello, world")
application = tornado.web.Application([(r"/", EchoWebSocket),(r'/',MainHandler),])
application.listen(8001)
tornado.ioloop.IOLoop.instance().start()
我正在使用 IDLE,到目前为止一切正常,只有一个烦人的问题。我无法修复此代码,然后重新运行服务器而不会看到此错误:
application.listen(8001)
File "C:\Python27\lib\site-packages\tornado\web.py", line 1691, in listen
server.listen(port, address)
File "C:\Python27\lib\site-packages\tornado\tcpserver.py", line 125, in listen
sockets = bind_sockets(port, address=address)
File "C:\Python27\lib\site-packages\tornado\netutil.py", line 137, in bind_sockets
sock.bind(sockaddr)
File "C:\Python27\lib\socket.py", line 224, in meth
return getattr(self._sock,name)(*args)
error: [Errno 10048] Only one usage of each socket address (protocol/network address/port) is normally permitted
当我终止程序时,python 似乎没有关闭套接字。我发现的唯一方法是在任务管理器中终止 python 进程,而不是让我的端口再次“空闲”。
为什么会发生这种情况,可以做些什么(这样真的很辛苦..)?为什么操作系统不会释放我的端口?
【问题讨论】:
-
你确定程序真的要终止了吗?如果任务管理器中还有
Python进程在运行,听起来好像还在运行。 -
好吧,我正在关闭正在运行的空闲服务器,他问我“你想杀死它吗?”我点击是。就这样。它不会关闭套接字。
标签: python sockets port bind tornado