Heim  >  Artikel  >  Backend-Entwicklung  >  Methoden zum Verbinden mehrerer Clients in der Python-Multithread-Socket-Programmierung

Methoden zum Verbinden mehrerer Clients in der Python-Multithread-Socket-Programmierung

巴扎黑
巴扎黑Original
2017-09-13 09:39:161876Durchsuche

Dieser Artikel stellt hauptsächlich den Multi-Client-Zugriff in der Python-Multithread-Socket-Programmierung im Detail vor. Interessierte Freunde können sich auf

beziehen. Die Implementierung der Socket-Kommunikation in Python ist relativ komplex. Die Clientseite ist jedoch sehr einfach, daher wird die Clientseite grundsätzlich mithilfe des Sockct-Moduls implementiert, und für die Serviceseite
stehen viele Module zur Verfügung, wie folgt:

Methoden zum Verbinden mehrerer Clients in der Python-Multithread-Socket-Programmierung

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. SocketServer-Modul

Damit mehrere Clients gleichzeitig auf den Dienst zugreifen und kommunizieren können, verwendet der Server das SocketServer-Modul, um ihn zu implementieren. Auf diese Weise muss der Benutzer nicht den übergeordneten Prozess verwenden, um ihn nach dem untergeordneten Thread zu verarbeiten endet und muss sich nicht um das Schließen des Sockets kümmern, alles wird von SocketServer erledigt.


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

Im folgenden Test habe ich zwei Interrupts von einem anderen Host und dieser Maschine verwendet, um eine Verbindung zum Server herzustellen. Beide können eine normale Verbindung herstellen und Datenantworten durchführen Interaktion

Methoden zum Verbinden mehrerer Clients in der Python-Multithread-Socket-Programmierung

Hinweis: Die laufende Plattform dieses Programmbeispiels ist rhel7.2.x86_64 und die Python-Version ist 3.6.2. Es kann zu mangelnder Kompatibilität für Benutzer kommen mit Windows-Plattformen und verschiedenen Python-Versionen, wenn Sie Benutzer anderer Plattformen sind, korrigieren Sie es bitte selbst! !

Das obige ist der detaillierte Inhalt vonMethoden zum Verbinden mehrerer Clients in der Python-Multithread-Socket-Programmierung. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn