python 在同一文件中监听两个端口

1 投票
3 回答
2603 浏览
提问于 2025-04-15 18:03

我想用同一个服务器监听两个不同的UDP端口。

我使用的是SocketServer库,基本上代码是这样的:

SocketServer.UDPServer(('', 7878), CLASSNAME)

我想用同一个服务器和同一个文件同时监听7878和7879这两个端口。这样做可以吗?如果可以的话,怎么做呢?

3 个回答

0

这种情况不需要使用线程。可以考虑一下这个链接:http://code.google.com/p/pyev/

1

不行。可以考虑使用Twisted这个工具。

3

当然可以,使用线程就行。这里有一个服务器的例子:

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模块的文档中拿来的,经过修改后加入了线程的功能。

撰写回答