我想在同一台服务器上监听 2 个不同的 UDP 端口。我为我的服务器使用 SocketServer lib,基本上它看起来像这样;
SocketServer.UDPServer(('', 7878),类名)
我想用相同的服务器和相同的文件在 7878 和 7879 上收听。那可能吗?如果是怎么办?
我想在同一台服务器上监听 2 个不同的 UDP 端口。我为我的服务器使用 SocketServer lib,基本上它看起来像这样;
SocketServer.UDPServer(('', 7878),类名)
我想用相同的服务器和相同的文件在 7878 和 7879 上收听。那可能吗?如果是怎么办?
当然可以,使用线程。这是一个服务器:
import SocketServer
import threading
class MyUDPHandler(SocketServer.BaseRequestHandler):
def handle(self):
data = self.request[0].strip()
socket = self.request[1]
print "%s wrote:" % self.client_address[0]
print data
socket.sendto(data.upper(), self.client_address)
def serve_thread(host, port):
server = SocketServer.UDPServer((host, port), MyUDPHandler)
server.serve_forever()
threading.Thread(target=serve_thread,args=('localhost', 9999)).start()
threading.Thread(target=serve_thread,args=('localhost', 12345)).start()
它创建一个服务器来监听 9999 和另一个监听 12345。这是一个示例客户端,您可以使用它进行测试:
import socket
import sys
HOST, PORT = "localhost", 12345
data = 'da bomb'
# SOCK_DGRAM is the socket type to use for UDP sockets
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# As you can see, there is no connect() call; UDP has no connections.
# Instead, data is directly sent to the recipient via sendto().
sock.sendto(data + "\n", (HOST, PORT))
received = sock.recv(1024)
print "Sent: %s" % data
print "Received: %s" % received
注意:这是从SocketServer
模块的文档中获取的,并使用线程进行了修改。
没有。考虑使用Twisted。
不需要为这样的事情使用线程。考虑http://code.google.com/p/pyev/