2010-01-15 7 views
1

Je voudrais écouter sur 2 ports UDP différents avec le même serveur. J'utilise SocketServer lib pour mon serveur et, fondamentalement, il ressemble à ça;python écouter 2 port même fichier

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

Je voudrais écouter sur 7878 et 7879 avec le même serveur et même fichier. Est-ce possible? Si oui comment?

Répondre

3

Bien sûr que vous pouvez, en utilisant des discussions. Voici un serveur:

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() 

Il crée un serveur pour écouter sur 9999 et une autre pour écouter sur 12345. Voici un exemple de client que vous pouvez utiliser pour tester ceci:

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 

Note: ceci a été pris à partir des documents du module SocketServer, et modifié avec des discussions.

1

Non. Envisagez d'utiliser Twisted.

Questions connexes