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:
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
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!