Python TCP客户端到客户端的消息转发

Python TCP客户端到客户端的消息转发

问题描述:

我正在寻找一个TCP服务器的Python的简短例子,将传入的客户端消息传递给另一个新客户端。我能找到的只是回显服务器/客户端的例子。Python TCP客户端到客户端的消息转发

干杯,

dhpizza

这里是只使用标准库的基本示例:

import SocketServer 
import threading 

class Handler(SocketServer.StreamRequestHandler): 

    def handle(self): 
     print self.client_address,'connected' 
     self.server.add_client(self.request) 
     while 1: 
      data = self.request.recv(1024) 
      if not data: break 
      self.server.send(self.request,data) 
     self.server.remove_client(self.request) 

class Server(SocketServer.ThreadingTCPServer): 

    def __init__(self,*args,**kwargs): 
     SocketServer.ThreadingTCPServer.__init__(self,*args,**kwargs) 
     self.clients = [] 
     self.lock = threading.Lock() 

    def add_client(self,c): 
     with self.lock: 
      self.clients.append(c) 

    def remove_client(self,c): 
     with self.lock: 
      self.clients.remove(c) 

    def send(self,sender,data): 
     with self.lock: 
      for c in self.clients: 
       if c is not sender: 
        c.sendall(data) 

s = Server(('',8000),Handler) 
s.serve_forever() 
+0

你真的应该使用'与self.lock:',而不是调用获取和释放自己 - 更短并避免了明显的陷阱。 – Voo

+0

@Voo也许我正在使用Python 2.4:^)。谢谢,改变了。 –

+1

我的吊,是软件依赖性的另一受害者:( – Voo