import SocketServer
import sys
from Queue import *
import threading
class CustomTCPServer(SocketServer.TCPServer):
def __init__(self, server_address, RequestHandlerClass, commandQueue=Queue):
self.queue = commandQueue
SocketServer.TCPServer.__init__(self, server_address, RequestHandlerClass, bind_and_activate=False)
SocketServer.TCPServer.allow_reuse_address = True
self.server_bind()
self.server_activate()
class SingleTCPHandler(SocketServer.BaseRequestHandler):
def handle(self):
commandQueue = self.server.queue
self.data = self.request.recv(1024).strip()
try:
commandQueue.put(self.data)
except Queue.Empty:
print 'Sorry.. Cannot accept any more.. Queue is full..'
def main():
HOST = ''
PORT = 50099
commandQueue = Queue()
server = CustomTCPServer((HOST, PORT), SingleTCPHandler, commandQueue)
threadObject = threading.Thread(target=server.serve_forever)
threadObject.setDaemon(True)
threadObject.start()
threadObject.join()
if __name__ == '__main__':
main()但是,每当我第二次运行代码时,我都会收到socket.error: errno98地址已在使用的消息
我很困惑..。
如有任何建议,我们将不胜感激。
发布于 2013-10-26 15:27:13
而不是:
SocketServer.TCPServer.allow_reuse_address = True它设置基类上的值,您已经从这个基类派生了自己的子类(并创建了的实例),
使用:
self.allow_reuse_address = True发布于 2013-10-26 15:32:37
看起来你永远不会在最后关闭插口。尝试添加一个server.shutdown() (以及更改allow_reuse_address),以便在线程连接结束时将其关闭。
https://stackoverflow.com/questions/19603739
复制相似问题