如何用Python创建一个同时监听两个端口的简单DNS服务器
我正在尝试用Python建立一个DNS服务器。这个服务器需要监听两个端口(8007 - 客户端,8008 - 管理员)。客户端只需要发送一个网址,然后就能收到对应的IP地址。而管理员则有权限修改DNS表(比如添加、删除等等,这个现在不重要)。
所以我想问的是:我该如何实现这个服务器,让它能够持续监听这两个端口,随时接收请求(我们可以同时有多个客户端,但在管理员操作时只能有一个管理员)
这是我用一个监听端口的服务器代码:
from SocketServer import *
from threading import *
from string import *
import socket
class Server(ForkingMixIn, TCPServer): pass #fork for each client
class Handler(StreamRequestHandler):
def handle(self):
addr = self.request.getpeername()
print 'Got connection from', addr
data=(self.request.recv(1024)).strip()
if data not in dic: #dic -> dictionary with URL:IP
self.wfile.write('0.0.0.0')
else:
self.wfile.write(dic.get(data))
server = Server(('', 8007), Handler)
server.serve_forever()
2 个回答
0
你可以使用非阻塞套接字,并通过调用 select 来从套接字读取数据。这个 Python 套接字编程指南 里有一部分专门讲解 Python 中的非阻塞套接字,可以帮助你理解。
另外,你也可以参考:
5