Python прослушивает 2 порта того же файла
-
20-09-2019 - |
Вопрос
Я хотел бы прослушивать два разных порта UDP с одного и того же сервера.Я использую библиотеку SocketServer для своего сервера, и в основном это выглядит так;
SocketServer.UDPServer(('', 7878),ИМЯ КЛАССА)
Я хотел бы слушать на 7878 и 7879 с тем же сервером и тем же файлом.Это возможно?Если да, то как?
Решение
Конечно, вы можете, используя потоки.Вот сервер:
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
модуль и модифицирован с помощью потоков.
Другие советы
Неа.Рассмотрите возможность использования витой.
Нет необходимости использовать потоки для чего-то подобного.Учитывать http://code.google.com/p/piev/