この記事では主に Python のマルチスレッド ソケット プログラミングとマルチクライアント アクセスについて詳しく紹介します。興味のある方は参考にしてください。
Python でソケット通信を実装するサーバー側は非常に複雑です。シンプルなので、クライアントは基本的に sockct モジュールを使用して実装され、次のようにサービス側で使用できるモジュールが多数あります。
#!/usr/bin/env python #coding:utf-8 ''' file:client.py date:9/9/17 3:43 PM author:lockey email:lockey@123.com desc:socket编程客户端,python3.6.2 ''' import socket,sys HOST = '192.168.1.6' PORT = 8998 ADDR =(HOST,PORT) BUFSIZE = 1024 sock = socket.socket() try: sock.connect(ADDR) print('have connected with server') while True: data = input('lockey# ') if len(data)>0: print('send:',data) sock.sendall(data.encode('utf-8')) #不要用send() recv_data = sock.recv(BUFSIZE) print('receive:',recv_data.decode('utf-8')) else: sock.close() break except Exception: print('error') sock.close() sys.exit()
2.
複数のクライアントがサービスにアクセスし、同時に通信できるようにするために、サーバーは SocketServer モジュールを使用してサービスを実装します。この方法では、ユーザーは、その後、親プロセスを使用してサービスを処理する必要がありません。子スレッドが終了します。ソケットを閉じることについて心配する必要はありません。すべてが SocketServer によって行われます。
#!/usr/bin/env python #coding:utf-8 ''' file:client.py date:9/9/17 3:43 PM author:lockey email:lockey@123.com desc:socket编程服务器端,python3.6.2 ''' from socketserver import BaseRequestHandler,ThreadingTCPServer import threading BUF_SIZE=1024 class Handler(BaseRequestHandler): def handle(self): address,pid = self.client_address print('%s connected!'%address) while True: data = self.request.recv(BUF_SIZE) if len(data)>0: print('receive=',data.decode('utf-8')) cur_thread = threading.current_thread() #response = '{}:{}'.format(cur_thread.ident,data) self.request.sendall('response'.encode('utf-8')) print('send:','response') else: print('close') break if __name__ == '__main__': HOST = '192.168.1.6' PORT = 8998 ADDR = (HOST,PORT) server = ThreadingTCPServer(ADDR,Handler) #参数为监听地址和已建立连接的处理类 print('listening') server.serve_forever() #监听,建立好TCP连接后,为该连接创建新的socket和线程,并由处理类中的handle方法处理 print(server)次のテストでは、別のホストとこのマシンの 2 つの割り込みを使用してサーバーに接続しました。どちらも正常に接続でき、データ応答対話を実行できます
注: の実行プラットフォーム。このプログラムの例は rhel7 .2.x86_64 で、Python のバージョンは 3.6.2 です。Windows プラットフォームおよび異なる Python バージョンのユーザーには互換性がない可能性があります。他のプラットフォームを使用している場合は、自分で修正してください。 !
以上がPython マルチスレッドソケットプログラミングで複数のクライアントを接続する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。