Maison >développement back-end >Tutoriel Python >Méthodes pour connecter plusieurs clients dans la programmation de socket multithread Python

Méthodes pour connecter plusieurs clients dans la programmation de socket multithread Python

巴扎黑
巴扎黑original
2017-09-13 09:39:161949parcourir

Cet article présente principalement en détail l'accès multiclient dans la programmation de socket multithread Python. Il a une certaine valeur de référence. Les amis intéressés peuvent se référer à

Implémentation de la communication socket en Python Le côté serveur est relativement complexe, mais le côté client est très simple, donc le côté client est essentiellement implémenté à l'aide du module sockct, et il existe de nombreux modules disponibles pour le côté service
, comme suit :

Méthodes pour connecter plusieurs clients dans la programmation de socket multithread Python

1. Client


#!/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. >Afin de permettre à plusieurs clients d'accéder au service et de communiquer en même temps, le serveur utilisera le module SocketServer pour l'implémenter. De cette manière, l'utilisateur n'a pas besoin d'utiliser le processus parent pour le traiter après le thread enfant. se termine et n'a pas besoin de se soucier du fait que le socket est fermé, tout est fait par SocketServer.


Dans le test suivant, j'ai utilisé deux interruptions d'un autre hôte et de cette machine pour me connecter au serveur. Les deux peuvent se connecter normalement et effectuer une réponse de données. interaction

#!/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)

Remarque : la plate-forme d'exécution de cet exemple de programme est rhel7.2.x86_64 et la version python est 3.6.2. Il peut y avoir un manque de compatibilité pour les utilisateurs. avec les plateformes Windows et les différentes versions de Python, si vous êtes un utilisateur d'autres plateformes, veuillez le corriger vous-même ! ! Méthodes pour connecter plusieurs clients dans la programmation de socket multithread Python

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn