Programmation de socket Python - Avant de commencer avec la programmation de socket Python, j'espère que vous avez de bonnes bases en python. Si vous connaissez Django également, ce serait encore plus facile à comprendre. Non, la programmation de socket n'est pas liée à Django, mais les terminologies dans la programmation de socket Python et Django sont presque les mêmes, bien qu'elles soient de deux catégories différentes. Donc, pour commencer, qu'est-ce que la programmation Python Socket? La programmation Python Socket n'est pas seulement présente en python, mais aussi en Java et dans presque tous les autres langages de programmation. Mais dans le cas de python, la programmation des sockets est en fait très facile à comprendre. La programmation Python Socket signifie la programmation réseau. Il comprend les codes associés côté client et côté serveur Python Socket. Mais cette définition est tout aussi bonne qu'un livre indiquant que la programmation C est utilisée pour développer un logiciel. Et non, je ne suis pas là pour ça. Je suis ici pour m'assurer que vous comprenez mieux les bases de la programmation de socket Python, avant de commencer à écrire vos propres modules de socket. Permet donc de commencer et de voir comment fonctionne le socket côté client ou côté serveur Python Socket.

Qu'est-ce que la programmation de sockets Python?

Si vous avez appris la programmation C, alors l'apprentissage de la programmation de socket python en Python serait très facile car ils sont presque les mêmes. Pour le rendre plus simple, la programmation des sockets python n'est qu'un morceau de code sur la façon dont les ordinateurs d'un réseau communiquent entre eux. Et cela ne se termine pas avec un simple réseau LAN, il prend également en charge les réseaux WAN, MAN et intranet. Nous utilisons même des prises dans notre vie de tous les jours. Ne pas comprendre? Permettez-moi de vous donner un exemple simple. Lorsque vous souhaitez vous connecter à disons Facebook.com, vous tapez simplement la même chose dans la barre d'URL. Ainsi, cette connexion que vous venez de créer n'est pas uniquement créée par le DNS. Tout cela est configuré via la programmation de socket python. Les sockets décident comment deux réseaux communiquent. Toute communication passant par un réseau, que ce soit une vidéo, des connexions VOIP ou simplement du texte; tout passe par une prise. Maintenant que nous savons ce que sont les sockets, développons notre propre socket en python.

Source de l'image: pixabay.com

Types de programmation de sockets Python

Maintenant, il y a des tas de prises là-bas. Mais nous ne parlerons pas de chacun d'eux car je ne peux pas couvrir chacun d'entre eux ici. Vous pouvez soit créer un socket UDP, un socket TCP ou même un socket de port et il y en a beaucoup plus si je continue. Mais je chercherais plus dans les sockets TCP et UDP aujourd'hui car ce sont les plus basiques et ils peuvent être extrêmement bons comme point de départ pour commencer avec la programmation Python Socket.

  • Programmation des sockets UDP

Le protocole de datagramme utilisateur ou son communément appelé UDP est un protocole alternatif à TCP qui transfère les paquets d'un hôte à un autre. Mais contrairement au TCP (protocole de contrôle de transmission), UDP est un protocole sans connexion et il n'est pas orienté flux. Cela signifie que le serveur UDP ne capturera que les paquets entrants de tout l'hôte sans identifier une connexion source fiable. Nous utiliserons la fonction socket.socket pour ce faire. Un socket UDP simple est créé de la manière suivante en Python:

import socket # importation du module socket depuis la bibliothèque python # Maintenant, nous devons créer AF_INET et sock dgram socketss = socket.socket (socket.AF_INET, socket.SOCK_DGRAM) imprimer «Création de socket réussie»

Oui. C'est tout et nous avons créé un simple socket UDP ici en python. La programmation de sockets Python ou même la création d'un socket simple n'est pas sorcière. Mais le gros problème réside dans le codage du serveur UDP et du client. Comme les sockets UDP sont sans connexion, les communications sont lancées avec les fonctions de socket d'envoi et de réception. Ces fonctions ne nécessitent pas qu'ils soient connectés les uns aux autres. Ils peuvent réellement envoyer et recevoir des paquets à partir de n'importe quelle source aléatoire. Voici comment un serveur UDP est créé:

import socketport = 2924s = socket.socket (socket.AF_INET, socket.SOCK_DGRAM) s.bind ((“”, port)) print “Demande de connectivité au port sur la machine”, port

tandis que 1:

data, address = s.recvfrom (1024)

imprimer les données

Cela peut ne pas sembler grand-chose, mais c'est ainsi qu'il est réellement créé. On peut utiliser n'importe quel port ici. Je viens d'en choisir un au hasard comme 2924. Le serveur UDP a besoin d'un port ouvert pour envoyer et recevoir les connexions entrantes. Il n'y a pas d'écoute de port ou d'acceptation de connexions ou de demande. Cela se produit simplement sans aucune authentification. Essayez d'exécuter le serveur ci-dessus sur un terminal et voyez comment cela fonctionne.

Ce n'est qu'un simple serveur UDP que nous avons créé. Rendons cela un peu plus intéressant et aussi un peu plus compliqué:

”'Il s'agit d'un simple serveur de socket UDP”' import socketimportimport sys

HOST = "" # On peut essayer toutes les interfaces disponibles ici

PORT = 2924 # Tout port aléatoire qui n'est pas utilisé par défaut sur les distributions Windows ou Linux

# Codage du socket UDP

essayez:

s = socket.socket (socket.AF_INET, socket.SOCK_DGRAM)

imprimer «Socket initialisé» '

sauf socket.error, msg:

imprimer «La création du socket a échoué. L'erreur suivante s'est produite: ”+ str (msg (0)) + 'Message' + msg (1)

sys.exit ()

# Maintenant, nous devons lier cette socket à l'hôte et au port ci-dessus

essayer:

liaison ((HÔTE, PORT))

sauf socket.error, msg:

imprimer «Échec de la prise de liaison. L'erreur suivante a interrompu la liaison: ”+ str (msg (0)) + 'Message' + msg (1)

sys.exit ()

imprimer 'Reliure prise terminée'

#Maintenir la connexion établie

tandis que 1:

# capturer les données du client en utilisant des données et une adresse variables

d = s. recvfrom (1024)

données = d (0)

adresse = d (1)

sinon données:

Pause

répondre = 'OK…' + données

s.sendto (réponse, adresse)

print 'Token message (' + address (0) + ':' + str (address (1)) + ') -' + data.strip ()

s.close ()

Exécutez le programme ci-dessus et vous démarrerez un serveur UDP sur le port 2924. Félicitations, vous avez réussi à créer un socket en Python. Et assurez-vous de noter qu'un serveur UDP peut gérer des charges de clients contrairement au serveur TCP, la principale raison étant qu'il n'y a pas de connectivité fixe dans un serveur UDP comme dans le cas d'un serveur TCP.

Cours recommandés

  • Cours de certification en débogage Ruby
  • Cours PHP MySQL
  • Cours de certification en programmation VB.NET
  • Formation complète ITIL Foundation
  • Programmation client UDP

Maintenant que nous avons réussi à créer un serveur UDP, nous avons besoin d'un client pour établir une connexion appropriée avec lui afin de connaître son fonctionnement. Permet donc de travailler sur la création d'un client UDP approprié en Python. Ce client se connectera à notre serveur UDP que nous avons créé ci-dessus:

”'Création d'un client UDP simple à l'aide de sockets”' import sys importimport

# Création d'un socket UDP

essayer:

s = socket.socket (socket.AF_INET, socket.SOCK_DGRAM)

sauf socket.error:

imprimer 'La création de socket a échoué'

sys.exit ()

hôte = '127.0.0.1'; #Vous pouvez également essayer d'utiliser localhost à la place de cette IP, les deux sont identiques.

port = 2924;

tandis que (1):

msg = raw_input ('Tapez un message à envoyer au serveur:')

essayez:

#Maintenant, nous devons définir les chaînes

s.sendto (msg, (hôte, port))

# Maintenant, nous devons recevoir les données et l'adresse du client en utilisant les données et l'adresse

d = s. recvfrom (1024)

réponse = d (0)

adresse = d (1)

imprimer 'La réponse du serveur est:' + répondre

sauf socket.error, msg:

print 'Erreur suivante apparue:' + str (msg (0)) + 'Message' + msg (1)

sys.exit ()

Ouaip. La création d'un client UDP dans la programmation Python Socket est beaucoup plus facile que la création d'un serveur UDP. Mais c'est comme ça que ça se passe. Je ne pense pas avoir besoin d'expliquer quoi que ce soit à partir du morceau de code ci-dessus, car j'ai déjà mentionné toutes les choses requises dans les commentaires de la balise #. Assurez-vous simplement que l'adresse IP et le port que vous avez entrés sont corrects, et que votre pare-feu ne bloque pas la connexion, sinon cela entraînera toujours une panne, quoi qu'il arrive.

  • Programmation de socket TCP

Maintenant que nous avons appris à créer un client et un serveur UDP, jetons un œil à la programmation des sockets TCP. Nous allons utiliser la même fonction socket.socket pour créer un socket TCP ici.

import socket # Importation du socket de module à partir des bibliothèques python # créer un AF_INET et diffuser socketss = socket.socket (socket.AF_INET, socket.SOCK_STREAM) print 'Socket Creation Successful'

Ici, AF_INET est utilisé pour la connexion d'adresse Ipv4 et le flux de chaussettes est un protocole orienté TCP. Il s'agit d'un simple socket TCP que nous avons créé. Maintenant, nous allons créer une version avancée de la même chose. Nous allons également ajouter des exceptions ici, de la même manière que nous l'avons lancée lors de la création de serveurs et de clients UDP afin qu'en cas de défaillance de la connectivité, nous sachions où se trouve le programme réel. Socket.error sera utilisé pour gérer toutes ces erreurs similaires à celle de la programmation UDP.

Alors maintenant, créons un socket avec la gestion des erreurs ci-dessus et connectez-vous à l'hôte facebook.com. Voici comment cela doit être fait:

import socket #importing the socket moduleimport systry: s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)

sauf socket.error, msg:

print 'La création de socket a échoué. L'erreur suivante s'est produite: '+ str (msg (0)) +', Message d'erreur: '+ msg (1)

sys.exit ();

print 'Création de socket réussie'

host = 'www.facebook.com'

port = 2924

essayer:

remote_ip = socket.gethostbyname (hôte)

sauf socket.gaierror:

print 'Nom d'hôte incorrect. Quitter… »

sys.exit ()

imprimer "+ hôte + adresse IP" est "+ remote_ip

s.connect ((remote_ip, port))

imprimer 'Socket connecté à' + hôte + 'sur ip' + remote_ip

Maintenant, cela suffit si nous devons simplement établir une connexion. Mais ce n'est pas notre objectif. Nous avons l'intention de créer une connexion où nous pourrions également envoyer et recevoir des données aux deux extrémités. Nous pouvons envoyer des données en utilisant la fonction sendall. Voici donc comment ça se passe:

import socket #importing the socket moduleimport systry: s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)

sauf socket.error, msg:

print 'La création de socket a échoué. L'erreur suivante s'est produite: '+ str (msg (0)) +', Message d'erreur: '+ msg (1)

sys.exit ();

print 'Création de socket réussie'

host = 'www.facebook.com'

port = 2924

essayer:

remote_ip = socket.gethostbyname (hôte)

sauf socket.gaierror:

print 'Nom d'hôte incorrect. Quitter… »

sys.exit ()

imprimer "+ hôte + adresse IP" est "+ remote_ip

s.connect ((remote_ip, port))

imprimer 'Socket connecté à' + hôte + 'sur ip' + remote_ip

#transfert de données à l'aide de la fonction sendall

message = "GET / HTTP / 1.1 \ r \ n \ r \ n"

essayez:

s.sendall (message)

sauf socket.error:

#Echec de l'envoi

imprimer 'Échec de transmission'

sys.exit ()

imprimer «Statut du message: envoyé»

Maintenant que nous avons créé une connexion réussie et que nous pouvons également envoyer les données, examinons comment nous pourrions recevoir les données dans leur ensemble. Voici comment ça se passe:

import socket #importing the socket moduleimport systry: s = socket.socket (socket.AF_INET, socket.SOCK_STREAM)

sauf socket.error, msg:

print 'La création de socket a échoué. L'erreur suivante s'est produite: '+ str (msg (0)) +', Message d'erreur: '+ msg (1)

sys.exit ();

print 'Création de socket réussie'

host = 'www.facebook.com'

port = 2924

essayer:

remote_ip = socket.gethostbyname (hôte)

sauf socket.gaierror:

print 'Nom d'hôte incorrect. Quitter… »

sys.exit ()

imprimer "+ hôte + adresse IP" est "+ remote_ip

s.connect ((remote_ip, port))

imprimer 'Socket connecté à' + hôte + 'sur ip' + remote_ip

#transfert de données à l'aide de la fonction sendall

message = "GET / HTTP / 1.1 \ r \ n \ r \ n"

essayez:

s.sendall (message)

sauf socket.error:

#Echec de l'envoi

imprimer 'Échec de transmission'

sys.exit ()

imprimer «Statut du message: envoyé»

#Maintenant, pour recevoir des données, nous utilisons la fonction recv pour y parvenir

répondre = s.recv (4096)

imprimer la réponse

La dernière chose est que nous devons fermer le socket, ce que nous pourrions faire par le code suivant:

s.close ()

Et enfin, la partie contraignante. Nous pouvons utiliser la fonction bind pour lier ensemble des sockets avec des adresses IP et des ports.

import socketimport sysHOST = ”#C'est la même manière que nous l'avons fait dans le port UDP protocol = 2924 # pour accéder aux données.

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

print 'Création de socket réussie'

essayer:

liaison ((HÔTE, PORT))

sauf socket.error, msg:

print 'Échec de la liaison. L'erreur suivante s'est produite '+ str (msg (0)) +' Message '+ msg (1)

sys.exit ()

print 'Socket Binding réussi'

Maintenant, nous devons écouter les connexions entrantes si nous avons besoin du serveur pour se connecter. Cela peut être fait avec la commande simple suivante:

s.listen (10) print 'Listener started'

Et enfin, nous devons créer un socket pour accepter ces connexions:

import socket import sysHOST = ”PORT = 2924

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

print 'Création de socket réussie'

essayer:

liaison ((HÔTE, PORT))

sauf socket.error, msg:

print 'Échec de la liaison. L'erreur suivante s'est produite '+ str (msg (0)) +' Message '+ msg (1)

sys.exit ()

imprimer 'Reliure de socket réussie'

à l'écoute (10)

imprimer 'L'écouteur a commencé'

#Accepter les connexions

conn, addr = s.accept ()

#Fournir des informations sur les clients connectés

print 'Connexion établie avec' + addr (0) + ':' + str (addr (1))

Il y a en fait beaucoup plus à cela. Nous pouvons également écrire des codes pour les gestionnaires et autres choses. Mais je pense que ce serait tout pour l'instant. Assurez-vous d'avoir ces bases correctes, après quoi les parties restantes ne sont qu'un morceau de gâteau à apprendre.

Première source d'image: pixabay.com

Articles Liés:-

Voici quelques articles qui vous aideront à obtenir plus de détails sur la programmation de sockets Python, alors suivez simplement le lien.

  1. 25 questions et réponses d'entrevue les plus étonnantes sur Python
  2. Carrières en Python
  3. Quels sont les avantages et les limites de l'utilisation de Python?
  4. Différence importante Python vs performances Ruby
  5. Introduction à la programmation de socket en PHP
  6. Programmation des sockets en Java | Méthode de classe de socket