Pythonはsocket 1対多チャットを実現(socketserverを利用)


前回の「Python実現socket単純一対一チャット」では、あるクライアントがサービス側と接続を確立した後、他のクライアントもサービス側と接続を確立したい場合は、前のクライアントとサーバの間で接続が切断されてから接続する必要があります.
本編では、前回のアップグレード版を紹介し、Pythonのsocketserverモジュールを利用して、1つのサーバが複数のクライアントに同時に接続し、同時に通信することを実現します.クライアントは、前回のサービス側コードを変更する必要がなく、変更する必要がありません.
クライアントコード:https://blog.csdn.net/lincoco49/article/details/89639513
手順は次のとおりです.
  • socketserverモジュール
  • をインポート
  • クラスを作成し、クラス名は任意で、socketserverを継承する必要があります.BaseRequestHandlerクラス
  • クラスでhandleメソッドを定義します.関数名はhandle
  • でなければなりません.
  • handleメソッドでは、まず【conn=self.request】でサーバとクライアントとの接続を取得し、次に両端間の通信はconnに基づいて
  • を行う.
  • socketserverを作成します.ThreadingTCPServer()クラスは、サーバのipとportからなるメタグループと、ステップ2で作成したクラスのタイプの2つのパラメータを入力します.
  • server_を実行forever()メソッド
  • サービス側コード:
    #!/usr/bin/env python
    # -*- coding:utf-8 -*-
    
    
    #      ip    port
    LOCALHOST = '1.1.1.1'
    PORT = 9999
    
    import socketserver
    
    #  MysServer 
    class MyServer(socketserver.BaseRequestHandler):
    
        #  handle  ,      handle
        def handle(self):
            conn = self.request
            conn.sendall(bytes("    !
    q !", encoding='utf-8')) while True: ret = str(conn.recv(1024), encoding='utf-8') if ret == 'q': break else: conn.sendall(bytes(" :" + ret, encoding='utf-8')) if __name__ == '__main__': server = socketserver.ThreadingTCPServer((LOCALHOST, PORT), MyServer) server.serve_forever()

    次に、複数のクライアントとサーバが同時に接続され、通信できるようになります.