地址已与twisted中的多线程服务器一起使用

2024-09-28 01:33:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试用python编写一个使用twisted的多线程服务器。卡林思(自我任务)创建一个新线程,以在每次客户端从服务器请求某事物时运行task()。当客户机一个接一个地发送请求时(全部通过端口53),一切正常,但是当同时有多个请求时,它说

File "", line 1, in bind socket.error: [Errno 98] Address already in use

我的线程有问题吗?一次只能有一个人使用端口?如果是这样的话,我该如何处理服务器的多线程呢? 谢谢!在

class BaseThreadedUDPServer(DatagramProtocol):
    def datagramReceived(self, datagram, (host, port)):
        print "received %r from %s:%d" % (datagram, host, port)
        reactor.callInThread(self.task)

    def task(a):
        print "waiting on port:", csport
        while 1:
            ## RCV QUERY ##
            query, addr = csSocket.recvfrom(csbuf)
            ## GET ANS ##
            ans = socket.gethostbyname(query)
            ## SEND ANS ##
            scSocket.sendto(ans, scaddr)

def main():
    print "main"
    reactor.listenUDP(53, BaseThreadedUDPServer())
    reactor.run()

Tags: 端口inself服务器hosttaskportdef
1条回答
网友
1楼 · 发布于 2024-09-28 01:33:41

你不需要线程。这是可怕的马车。Twisted已经在为您调用recv:它是传递给datagramReceived的结果。你自己别再叫了。你不需要线。在

然而,这可能与你的问题无关。53是默认的DNS端口:问题是另一台服务器,可能是一台DNS服务器已经在该计算机上运行。尝试将53更改为其他值。在

但我不太确定,以后请粘贴完整的回溯。回溯行显然不是来自您粘贴的示例,因为第1行除了“class”语句之外没有其他内容。另外,由于这段代码缩进错误并引发一个SyntaxError,它显然与您正在运行的代码不完全相同。在

假设您实际在使用DNS,Twisted有自己的DNS服务器;您应该使用^{}而不是实现自己的DNS包解析。在

相关问题 更多 >

    热门问题