Pythonはsocket 1対多チャットを実現(socketserverを利用)
1552 ワード
前回の「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()メソッド サービス側コード:
次に、複数のクライアントとサーバが同時に接続され、通信できるようになります.
本編では、前回のアップグレード版を紹介し、Pythonのsocketserverモジュールを利用して、1つのサーバが複数のクライアントに同時に接続し、同時に通信することを実現します.クライアントは、前回のサービス側コードを変更する必要がなく、変更する必要がありません.
クライアントコード:https://blog.csdn.net/lincoco49/article/details/89639513
手順は次のとおりです.
#!/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()
次に、複数のクライアントとサーバが同時に接続され、通信できるようになります.