python听2端口相同的文件

时间:2010-01-15 04:40:09

标签: python udp socketserver

我想用同一台服务器监听2个不同的UDP端口。 我为我的服务器使用SocketServer lib,基本上它看起来像那样;

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

我想在7878和7879上使用相同的服务器和相同的文件。 那可能吗?如果是的话怎么样?

3 个答案:

答案 0 :(得分: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模块的文档,并使用线程进行修改。

答案 1 :(得分:1)

不。考虑使用Twisted

答案 2 :(得分:0)

不需要使用线程来做这样的事情。考虑http://code.google.com/p/pyev/