Programmation réseau en Python - Serveur TCP multithread

Tags associés :1. Renforcez votre Web avec Python
2. Shodan et l'API Python

Présentation


Le serveur TCP établit simultanément des sockets avec plusieurs clients, ce qui requiert un thread par client.

Étapes de mise en œuvre



1. Importer le module socket
import socket

2. Créer un socket serveur
socket.socket(AddressFamily, Type)
socket.AF_INET représente le type IPv4
SOCK_STREAM signifie tcp
Il faut configurer la réutilisation des ports pour prendre en charge plusieurs clients
tcp_server_socket = socket.socket ( socket.AF_INET , socket.SOCK_STREAM ) _ _ _ _ _ _

#Port multiplexing server exit port immediately release
tcp_server_socket.setsockopt ( socket.SOL_SOCKET , socket.SO_REUSEADDR , True ) _ _ _ _ _ _

3. Lier le numéro de port
tcp_server_socket.bind
Le premier paramètre représente l'adresse IP ; en général, vous n'avez pas besoin de spécifier d'IP, une valeur vide représentant la machine
Le second paramètre est le numéro de port
tcp_server_socket.bind (( ' ' , 9090 ) )

4. Configurer l'écoute
Indique le nombre maximal de connexions en attente d'établissement : 128
tcp_server_socket.listen ( 128 ) _ _

5. Attendre la demande de connexion du client
Un nouveau socket est renvoyé chaque fois que le client et le serveur établissent une connexion réussie
while True :
new_client , ip_port = tcp_server_socket.accept ( ) _
sub_thresd = threading . Thread ( target = handle , args = ( ip_port , new_client ))
sub_thresd.start ( ) _

6. Recevoir des données
Envoyer et recevoir des messages à l'aide du socket nouvellement renvoyé
rece_data = new_client.recv ( 1024 ) _ _
if rece_data :
rece_data = rece_data.decode ( ' utf -8' )
print ( "The received data is" , rece_data )

7. Envoyer des données
send_content = "Problem in progress"
send_data = send_content.encode ( ' utf -8' )
new_client.send ( send_data ) _ _
new_client.close ( ) _

8. Fermer le socket
tcp_server_socket.close ( ) _


Code :
import socket
import threading


def handle ( ip_port , new_client ):
print ( "The client's ip and port number is: " , ip_port )
while True :
# 5. Receive data
# Send and receive messages using the newly returned socket
rece_data = new_client.recv ( 1024 ) _ _
if rece_data :
rece_data = rece_data.decode ( ' utf -8' )
print ( "The received data is" , rece_data )
# 6. Send data
send_content = "Problem in progress"
send_data = send_content.encode ( ' utf -8' )
new_client.send ( send_data ) _ _
new_client.close ( ) _
else :
print ( "Client is offline" , ip_port )
break


if __name__ == '__main__' :
# 1. Create a server socket
# socket.AF_INET represents the IPv4 type
# SOCK_STREAM means tcp
tcp_server_socket = socket.socket ( socket.AF_INET , socket.SOCK_STREAM ) _ _ _ _ _ _
tcp_server_socket.setsockopt ( socket.SOL_SOCKET , socket.SO_REUSEADDR , True ) _ _ _ _ _ _
#Port multiplexing server exit port immediately release
#socket.SOL_SOCKET represents the current socket
#socket._RetAddress multiplexing options
#True determines multiplexing
# 2. Bind the port number
# The first parameter indicates the ip address, generally it is not necessary to set the top to indicate any ip of the machine
#The second parameter indicates the port number
tcp_server_socket.bind (( ' ' , 9090 ) )
# 3. Set up monitoring
# 128: Indicates the maximum number of connections waiting to be established
tcp_server_socket.listen ( 128 ) _ _
# 4. Wait for the client's connection request
#Every time the client and server establish a successful connection, a new socket will be returned
while True :
new_client , ip_port = tcp_server_socket.accept ( ) _
sub_thresd = threading . Thread ( target = handle , args = ( ip_port , new_client ))
sub_thresd.start ( ) _


# 7. Close the socket
tcp_server_socket.close ( ) _


Déclaration de droits d'auteur : le contenu de cet article est fourni par des utilisateurs inscrits sous leur nom réel sur Alibaba Cloud. Les droits d'auteur appartiennent à l'auteur original. La communauté des développeurs Alibaba Cloud ne détient pas les droits d'auteur et n'assume pas la responsabilité légale correspondante. Pour connaître les règles spécifiques, veuillez consulter l'« Accord de service des utilisateurs de la communauté des développeurs Alibaba Cloud » et les « Directives de protection de la propriété intellectuelle de la communauté des développeurs Alibaba Cloud ». Si vous trouvez un contenu soupçonné de plagiat dans cette communauté, remplissez le formulaire de réclamation pour violation afin de le signaler. Une fois vérifié, cette communauté supprimera immédiatement le contenu présumé contrefaisant.

Articles connexes

Découvrir plus d'offres spéciales

  1. Service de messages courts (SMS) et service de messagerie

    50,000 email package starts as low as USD 1.99, 120 short messages start at only USD 1.00

phone Contacter
Hi, I'm Alibaba Cloud AI Assistant!
I can help with questions and solutions.