Python слушает 2 порта тот же файл - PullRequest
1 голос
/ 15 января 2010

Я хотел бы прослушивать 2 разных UDP-порта с одним и тем же сервером. Я использую SocketServer lib для своего сервера, и в основном это выглядит так:

SocketServer.UDPServer (('', 7878), ИМЯ КЛАССА)

Я хотел бы прослушать 7878 и 7879 с тем же сервером и тем же файлом. Это возможно? Если да, то как?

Ответы [ 3 ]

3 голосов
/ 15 января 2010

Конечно, вы можете, используя темы. Вот сервер:

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 голос
/ 15 января 2010

Неа. Попробуйте использовать Twisted .

0 голосов
/ 22 июня 2010

Нет необходимости использовать темы для чего-то подобного. Рассмотрим http://code.google.com/p/pyev/

...