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

发布于 2024-12-07 19:36:40 字数 109 浏览 0 评论 0原文

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

干杯,

dhpizza

I am looking for a short example in python of a TCP server passing an incoming client message to another new client. All I could find was examples on echo server/clients.

Cheers,

dhpizza

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

む无字情书 2024-12-14 19:36:40

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

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()

Here's a basic example using only standard libraries:

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()
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文