2010-01-15 60 views
1

我想听2个不同的UDP端口与同一台服务器。 我使用SocketServer lib作为我的服务器,基本上它看起来像这样;蟒蛇听2端口相同的文件

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

我想在7878和7879听与相同的服务器和相同的文件。 这可能吗?如果是的话如何?

回答

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模块的文档,并用线程修改。