Как реализовать хаб в Python - PullRequest
0 голосов
/ 22 марта 2010

Дорогие все, мне нужно реализовать TCP-сервер на Python, который получает некоторые данные от клиента, а затем отправляет эти данные другому клиенту. Я пробовал много разных реализаций, но не смог заставить его работать. Любая помощь будет очень признательна.
Ниже мой код:

import SocketServer
import sys
import threading

buffer_size = 8182
ports = {'toserver': int(sys.argv[1]), 'fromserver': int(sys.argv[2])}

class ConnectionHandler(SocketServer.BaseRequestHandler):

    def handle(self):
        # I need to send the data received from the client connected to port 'toserver'
        # to the client connected to port 'fromserver' - see variable 'ports' above

class TwoWayConnectionServer(threading.Thread):

    def __init__(self):
        self.to_server = SocketServer.ThreadingTCPServer(("", ports['toserver']), ConnectionHandler)
        self.from_server = SocketServer.ThreadingTCPServer(("", ports['fromserver']), ConnectionHandler)
        threading.Thread.__init__(self)

    def run(self):
        while (1):
            self.to_server.handle_request()
            self.from_server.handle_request()

def serve_non_blocking():

    server = TwoWayConnectionServer()
    server.run()

if __name__ == '__main__':

    serve_non_blocking()

Ответы [ 2 ]

1 голос
/ 22 марта 2010

См. Витой учебник , а также twisted.protocols.portforward. Я думаю, что модуль portforward делает что-то немного отличное от того, что вы хотите, он открывает исходящее соединение с портом назначения, а не ожидает подключения второго клиента, но вы должны быть в состоянии работать оттуда.

0 голосов
/ 22 марта 2010

Можете ли вы более конкретно рассказать о том, что вы пробовали, а что не сработало? Есть много способов сделать это. Вероятно, проще всего было бы использовать библиотеку сокетов - возможно, некоторые примеры помогут:

http://docs.python.org/library/socket.html#example

...