首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python TCPServer地址重用

Python TCPServer地址重用
EN

Stack Overflow用户
提问于 2013-10-26 14:36:36
回答 2查看 4K关注 0票数 3
代码语言:javascript
复制
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地址已在使用的消息

我很困惑..。

如有任何建议,我们将不胜感激。

EN

回答 2

Stack Overflow用户

发布于 2013-10-26 15:27:13

而不是:

代码语言:javascript
复制
SocketServer.TCPServer.allow_reuse_address = True

它设置基类上的值,您已经从这个基类派生了自己的子类(并创建了的实例),

使用:

代码语言:javascript
复制
self.allow_reuse_address = True
票数 2
EN

Stack Overflow用户

发布于 2013-10-26 15:32:37

看起来你永远不会在最后关闭插口。尝试添加一个server.shutdown() (以及更改allow_reuse_address),以便在线程连接结束时将其关闭。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19603739

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档