ホームページ  >  記事  >  バックエンド開発  >  Python マルチスレッドソケットプログラミングで複数のクライアントを接続する方法

Python マルチスレッドソケットプログラミングで複数のクライアントを接続する方法

巴扎黑
巴扎黑オリジナル
2017-09-13 09:39:161923ブラウズ

この記事では主に Python のマルチスレッド ソケット プログラミングとマルチクライアント アクセスについて詳しく紹介します。興味のある方は参考にしてください。

Python でソケット通信を実装するサーバー側は非常に複雑です。シンプルなので、クライアントは基本的に sockct モジュールを使用して実装され、次のようにサービス側で使用できるモジュールが多数あります。

Python マルチスレッドソケットプログラミングで複数のクライアントを接続する方法

#!/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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。