如何在Python中实现集线器

如何在Python中实现集线器

问题描述:

亲爱的所有人,我需要在Python中实现一个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() 
+1

你需要更具体。你是什​​么意思“让它运行”?你不能启动程序吗? – unwind 2010-03-22 16:24:44

你能具体谈谈你尝试过什么,什么没有奏效?有很多方法可以做到这一点。也许最简单的办法是使用套接字库 - 也许在看一些例子可以帮助:

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

+0

看到我添加到我的问题的代码... – j3d 2010-03-24 11:46:20

Twisted tutorial,也twisted.protocols.portforward。我认为portforward模块与你想要的有些不同,它会打开到目的端口的传出连接,而不是等待第二个客户端连接,但你应该可以从那里工作。

+0

我已经添加了一些代码给我的问题(见上文)。例如,是否可以从一个客户端(端口'toserver')接收数据并直接将其转发给另一个客户端(端口'fromserfver')?还是有必要缓存传入的数据,并在目标客户端发送一条请求获取此数据的消息后立即将其发送到目标客户端?谢谢,杰夫 – j3d 2010-03-24 10:47:31

+0

我想你可能想缓冲,如果没有什么东西连接到'from_server',但否则''to_server'上的处理程序可能看起来像'def dataReceived(self,data):from_server.write(data)' 。 – keturn 2010-03-24 20:17:57