Python >> Tutoriel Python >  >> Python

Comment envoyer une multidiffusion UDP en Python ?

Formulation du problème : Comment envoyer et recevoir des messages UDP multicast en Python ?

Contexte :Multidiffusion est un concept de systèmes distribués pour la communication de groupe sur un réseau (one-to-many ou many-to-many). Le choix de la « couche de transport » du réseau utilisé par la multidiffusion détermine son type, par exemple, IP Multicast envoie une multidiffusion sur la couche IP et Multidiffusion UDP l'envoie via la couche UDP (User Datagram Protocol) qui ne fournit aucune garantie de délivrabilité, il n'est donc pas fiable - les messages peuvent être perdus ou livrés dans le désordre. Mais cela rend UDP Multicast également rapide, léger et le protocole de choix pour de nombreux scénarios de streaming tels que Netflix envoyant UDP Multicast à tous les spectateurs d'une émission spécifique.

Nous faisons la distinction entre l'envoi et la réception de messages UDP Multicast en Python. Pour le code présenté dans ce tutoriel, vous n'avez pas besoin d'installer de bibliothèque personnalisée car nous n'avons besoin que du socket bibliothèque qui est déjà dans la bibliothèque standard de Python. ?

Envoi de multidiffusion UDP

Pour envoyer un message UDP à un groupe de multidiffusion écoutant sur une adresse IP et un PORT donnés, remplacez l'adresse IP, le PORT et le MESSAGE et exécutez le code suivant :

# SENDER

import socket

group = '224.1.1.1'
port = 5004

# 2-hop restriction in network
ttl = 2

sock = socket.socket(socket.AF_INET,
                     socket.SOCK_DGRAM,
                     socket.IPPROTO_UDP)
sock.setsockopt(socket.IPPROTO_IP,
                socket.IP_MULTICAST_TTL,
                ttl)

sock.sendto(b"hello world", (group, port))

Si vous avez envoyé un message que personne n'écoute, existe-t-il même ? 😉

Réception de la multidiffusion UDP

Voici comment vous pouvez créer un récepteur écoutant l'adresse IP et le PORT et affichant tous les messages reçus à l'écran :

# RECEIVER

import socket
import struct

MCAST_GRP = '224.1.1.1'
MCAST_PORT = 5004

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
sock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

sock.bind(('', MCAST_PORT))
mreq = struct.pack("4sl", socket.inet_aton(MCAST_GRP), socket.INADDR_ANY)

sock.setsockopt(socket.IPPROTO_IP, socket.IP_ADD_MEMBERSHIP, mreq)

while True:
    print(sock.recv(10240))

Vous pouvez personnaliser le traitement des messages comme vous le souhaitez. Si vous souhaitez avoir plusieurs récepteurs, utilisez simplement ce code exact pour démarrer plusieurs scripts Python qui reçoivent le même message en écoutant le même port et en recevant les mêmes paquets UDP.

Les ingénieurs en systèmes distribués doivent maîtriser au moins un langage de programmation. Je le sais par expérience personnelle en tant que chercheur doctorant sur les systèmes distribués. Si vous souhaitez améliorer vos compétences en Python, envisagez de rejoindre mon académie de messagerie gratuite qui vous apprendra tout ce dont vous avez besoin pour devenir un pro Python qualifié ! C'est gratuit !

Humour de programmeur

Il n'y a que 10 types de personnes dans ce monde :ceux qui connaissent le binaire et ceux qui ne le connaissent pas.
👩🧔‍♂️
~~~

Il existe 10 types de personnes dans le monde. Ceux qui comprennent le trinaire, ceux qui ne le comprennent pas et ceux qui le confondent avec le binaire.

👩🧔‍♂️👱‍♀️

Sources

  • https://en.wikipedia.org/wiki/Multidiffusion
  • https://wiki.python.org/moin/UdpCommunication
  • https://pymotw.com/2/socket/multicast.html
  • https://stackoverflow.com/questions/603852/how-do-you-udp-multicast-in-python
  • https://en.wikipedia.org/wiki/User_Datagram_Protocol