Python : Réseau

De Justine's wiki
Version datée du 23 novembre 2018 à 18:49 par Justine (discussion | contributions) (Page créée avec « La plupart des informations sont tirées de : [https://openclassrooms.com/fr/courses/235344-apprenez-a-programmer-en-python/234698-le-reseau https://openclassrooms.com/fr... »)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Aller à la navigation Aller à la recherche

La plupart des informations sont tirées de : https://openclassrooms.com/fr/courses/235344-apprenez-a-programmer-en-python/234698-le-reseau

 

Un client/serveur très simples pour comprendre le fonctionnement

Serveur:

# -*-coding:utf-8 -*

#Création d'un serveur

import socket  #Le module socket contient les objets sockets

connexion_principale = socket.socket(socket.AF_INET, socket.SOCK_STREAM) #L'objet socket, AF_INET correspond à la famille d'adresses (ici, IP), et SOCK_STREAM correspond à TCP

#On va connecter le socket, avec la méthode bind. Elle prend en paramètre un tuple (nom_hote, port).
#Binder le socket, cela veut dire que l'on va déclarer que l'on utilise ce port (On va prendre un port dynamique).

connexion_principale.bind((, 12800))

#On va faire écouter notre socket : il n'est pas encore en LISTEN. On va donc utiliser la méthode listen.
#On lui passe en paramètre le nombre de connexions qu'il peut recevoir et refuser (en général 5).

connexion_principale.listen(5)

#Accepter une connexion venant du client
#C'est la dernière étape : on va utiliser la méthode accept, qui bloque le processus tant qu'aucun client n'est venu se connecter.

#La méthode accept renvoie deux choses : le socket connecté qui vient de se créer, ainsi que le port de connexion du client.

connexion_avec_client, infos_connexion = connexion_principale.accept()

#Cette méthode bloque le programme, on va passer au client.

#########

#Une fois que le client s'est connecté, on peut récupérer nos informations de connexion

print(infos_connexion)

##Faire communiquer nos sockets
#Pour faire communiquer nos sockets, on va utiliser la méthode send pour envoyer et recv pour recevoir.
#send renvoie le nombre de caractères envoyés.

connexion_avec_client.send(b"J'ai accepte la connexion")

##On utilise recv côté client.

###Fermer la connexion

connexion_avec_client.close()

 

Le client :

import socket

# -*-coding:utf-8 -*

###On va d'abord créer le client de la même façon que pour le serveur

connexion_avec_serveur = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

##On va connecter le client avec la méthode connect. Elle prend comme bind un tuple en paramètre, contenant le nom d'hôte et le
#numéro de port du serveur.
#Vu que les deux applications sont sur la même machine le nom d'hôte est localhost

connexion_avec_serveur.connect(('localhost', 12800))

#Notre serveur et notre client sont connectés.

#On peut retourner sur notre serveur

###On va recevoir ce qu'envoie le serveur. recv prend en paramètre le nombre de caractères à lire, en général 1024.  On pourra
#récupérer un message en plusieurs fois.

msg_recu = connexion_avec_serveur.recv(1024)

print(msg_recu)

#Le message recu est affiché.

#Fermer la connexion

connexion_avec_serveur.close()