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()
你真的应该使用'与self.lock:',而不是调用获取和释放自己 - 更短并避免了明显的陷阱。 – Voo
@Voo也许我正在使用Python 2.4:^)。谢谢,改变了。 –
我的吊,是软件依赖性的另一受害者:( – Voo