Pitón

Envíe y reciba paquetes UDP a través de Python

Envíe y reciba paquetes UDP a través de Python
Ya conocemos dos protocolos de capa de transporte principales como TCP y UDP. Para obtener más información sobre TCP y UDP, puede consultar la sección de referencia.  En este artículo aprenderemos cómo enviar y recibir paquetes UDP usando el programa Python.

Expectativas:

Aquí hay algunos puntos clave que se pueden aprender de este artículo

  1. Envío de texto usando un programa de Python que usa el protocolo UDP.
  2. Recibir texto usando el programa Python que usa el protocolo UDP.
  3. Verifique el paquete UDP en Wireshark.
  4. Aprenda sobre el código Python para enviar y recibir paquetes UDP.

Diagrama de configuración general:

El sistema A y B deberían poder hacer ping entre sí.

Supuestos o limitaciones:

  1. Ambos sistemas deberían tener Linux con Ubuntu. El código puede funcionar o no en otros sistemas operativos como Windows10, MAC, etc.
  2. Ambos sistemas deben tener la versión 3 de Python. Este código puede o no funcionar en python 2.7 versión.

Nota: Puede consultar la referencia para probar Enviar y recibir paquetes UDP a través de la CLI de Linux antes de buscar archivos de Python para realizar la misma tarea.

Archivos de Python:

Hay dos archivos de Python servidor.py y cliente.py. El archivo del servidor y el archivo del cliente deben estar presentes en el sistema del servidor y en el sistema del cliente respectivamente.

Servidor.py

importar socket
importar sys
si len (sys.argv) == 3:
# Obtenga la "dirección IP del servidor" y también el "número de puerto" de
argumento 1 y argumento 2
ip = sys.argv [1]
puerto = int (sys.argv [2])
demás:
print ("Ejecutar como: servidor python3.py ")
salir (1)
# Crea un socket UDP
s = enchufe.enchufe (enchufe.AF_INET, enchufe.SOCK_DGRAM)
# Vincular el zócalo al puerto
dirección_servidor = (ip, puerto)
s.enlazar (dirección_servidor)
print ("Haz Ctrl + c para salir del programa !!")
mientras que es verdadero:
print ("####### El servidor está escuchando #######")
datos, dirección = s.recv de (4096)
imprimir ("\ n \ n 2. Servidor recibido: ", datos.decodificar ('utf-8'), "\ n \ n")
send_data = input ("Escribe un texto para enviar =>")
s.sendto (enviar_datos.codificar ('utf-8'), dirección)
imprimir ("\ n \ n 1. Servidor enviado: ", send_data," \ n \ n ")

Cliente.py

importar socket
importar sys
si len (sys.argv) == 3:
# Obtenga la "dirección IP del servidor" y también el "número de puerto" del argumento 1 y el argumento 2
ip = sys.argv [1]
puerto = int (sys.argv [2])
demás:
print ("Ejecutar como: cliente python3.py ")
salir (1)
# Crear socket para servidor
s = enchufe.enchufe (enchufe.AF_INET, enchufe.SOCK_DGRAM, 0)
print ("Haz Ctrl + c para salir del programa !!")
# Enviemos datos a través del protocolo UDP
mientras que es verdadero:
send_data = input ("Escriba un texto para enviar =>");
s.sendto (enviar_datos.codificar ('utf-8'), (ip, puerto))
imprimir ("\ n \ n 1. Cliente enviado: ", send_data," \ n \ n ")
datos, dirección = s.recv de (4096)
imprimir ("\ n \ n 2. El cliente recibió: ", datos.decodificar ('utf-8'), "\ n \ n")
# cierra el enchufe
s.cerca()

Enviar / recibir paquete UDP:

Tomemos un ejemplo como si enviaremos un paquete UDP del sistema A al sistema B. Entonces, en el concepto de servidor-cliente, tenemos que ejecutar el servidor en el lado del Sistema B y el cliente en el lado del Sistema A.

También tenemos direcciones IP válidas.

IP del sistema A: 192.168.1.6
IP del sistema B: 192.168.1.102

Ahora, a diferencia de Enviar y recibir paquetes UDP a través de la CLI de Linux, ejecutaremos servidor.py en el sistema, B [192.168.1.102] y luego correremos cliente.py en el sistema A [192.168.1.6].

Cómo ejecutar el servidor.py en 192.168.1.102?

Aquí está el comando para ejecutar el servidor.py

servidor $ python3.py 192.168.1.102 4444

Aquí está la captura de pantalla

Aquí hay dos argumentos para el programa Python. 1S t El argumento es la dirección IP del servidor en sí, aquí su 192.168.1.102 y 2Dakota del Norte El argumento es el puerto que escuchará el servidor, aquí hemos elegido 4444.

Cómo ejecutar el cliente.py en 192.168.1.6?

Aquí está el comando para ejecutar el cliente.py

$ python3 cliente.py 192.168.1.102 4444

Aquí está la captura de pantalla

Aquí hay dos argumentos para el programa Python. 1S t El argumento es la dirección IP del servidor, aquí es 192.168.1.102 y 2Dakota del Norte el argumento es el puerto donde se está ejecutando el servidor. Para nuestro ejemplo es 4444.

Envíe o reciba un mensaje de texto:

Ahora, como puede ver, estamos listos para comunicarnos entre dos sistemas. Pero tenemos que empezar por el cliente primero. Escribamos algo en el cliente y veamos si llega al servidor o no.

Enviar datos del cliente: "Soy del cliente"

Cliente de formulario de captura de pantalla:

Ahora este mensaje de cliente debería llegar al servidor. Aquí está la captura de pantalla del servidor.

Ahora podemos ver en el lado del servidor también tenemos la opción de enviar algo al cliente. Vamos a intentar eso.

Enviar datos del cliente: "Soy del servidor"

Captura de pantalla del servidor:

Y aquí está la captura de pantalla del lado del cliente.

Ahora esto continuará infinitas veces hasta que detengamos el programa Python usando Ctrl + c.

Verifique el paquete UDP en Wireshark:

Ahora hemos hecho algo de comunicación, pero ¿cómo llegamos a saber que se usó UDP para enviar o recibir esos paquetes?. Entonces, podemos verificar la captura en Wireshark.

Veamos el paquete cuando el cliente [192.168.1.6] envió datos ["Soy del cliente"] al servidor [192.168.1.6].

Explicación del código:

Para obtener una explicación básica del código de Python, consulte "Envío de transferencia de archivos de Python Socket" en la sección de referencia.

Solo explicaremos los códigos de líneas importantes para el archivo python del cliente y del servidor. Hay comentarios útiles dentro del código del cliente y del servidor.

Explicación del código de cliente:

si len (sys.argv) == 3:

La línea anterior es necesaria para comprobar si el usuario ha pasado los argumentos obligatorios necesarios. De lo contrario, el programa saldrá. La misma verificación está en el programa del servidor.

s = enchufe.enchufe (enchufe.AF_INET, enchufe.SOCK_DGRAM, 0)

La línea anterior es para crear un servidor de socket con UDP [SOCK_DGRAM] protocolo. El mismo código está en el servidor.py.

mientras que es verdadero:

Para ejecutar el programa en bucle infinito hasta que el usuario haga Ctrl + c. El mismo código está en el servidor.py.

s.sendto (enviar_datos.codificar ('utf-8'), (ip, puerto))

Para enviar datos para los mencionados ip y Puerto número.

datos, dirección = s.recv de (4096)

Para recibir cualquier dato proveniente del servidor. El mismo código está en el servidor.py.

Explicación del código del servidor:

s.sendto (enviar_datos.codificar ('utf-8'), dirección)

Enviar datos a la dirección del cliente.

Conclusión:

Podemos enviar o recibir datos UDP usando el programa Python. Internamente utiliza el mecanismo del cliente del servidor.

Referencias:

Para entender TCP: https: // linuxhint.com / tcp_packet_capture_analysis /
Para entender UDP: https: // linuxhint.com / udp_wireshark_analysis /
Envíe y reciba paquetes UDP a través de la CLI de Linux:
https: // linuxhint.com / send_receive_udp_packets_linux_cli /
Envío de transferencia de archivos de Python Socket:
https: // linuxhint.com / python_socket_file_transfer_send /

Puertos de código abierto de motores de juegos comerciales
Las recreaciones gratuitas, de código abierto y de motores de juegos multiplataforma se pueden usar para jugar títulos de juegos antiguos y también al...
Los mejores juegos de línea de comandos para Linux
La línea de comandos no es solo su mayor aliado cuando usa Linux, también puede ser la fuente de entretenimiento porque puede usarla para jugar muchos...
Las mejores aplicaciones de mapeo de gamepad para Linux
Si te gusta jugar juegos en Linux con un gamepad en lugar de un sistema de entrada de teclado y mouse típico, hay algunas aplicaciones útiles para ti....