Programación de Socket de Python: antes de comenzar con la Programación de Socket de Python, espero que tenga buenos conceptos básicos sobre Python. Si conoces a Django también, entonces sería aún más fácil de entender. No, la programación de socket no está relacionada con Django, pero las terminologías en la programación de socket de Python y Django son casi las mismas, aunque son dos categorías diferentes. Entonces, para empezar, ¿qué es exactamente la programación de socket de Python? La programación de Python Socket no solo está allí en python, sino también en Java y en casi todos los demás lenguajes de programación. Pero en el caso de Python, la programación de socket es realmente muy fácil de entender. La programación de Python Socket significa programación de red. Incluye los códigos relacionados del lado del cliente y del servidor Python Socket. Pero esa definición es tan buena como un libro que establece que la programación en C se utiliza para desarrollar software. Y no, no estoy aquí para eso. Estoy aquí para asegurarme de que entienda mejor los conceptos básicos de la programación de socket de Python, antes de comenzar a escribir sus propios módulos de socket. Así que comencemos y veamos cómo funciona el socket en el lado del cliente o en el lado del servidor de Python Socket.

¿Qué es la programación de socket de Python?

Si ha aprendido la programación en C, aprender la programación de socket de Python en Python sería muy fácil ya que son casi lo mismo. Para hacerlo más simple, la programación de socket de Python son solo códigos de cómo las computadoras en una red se comunican entre sí. Y esto no termina solo con una red basada en LAN, también es compatible con redes basadas en WAN, MAN e intranet. Incluso utilizamos enchufes en nuestro día a día. ¿No entendiendo? Dejame darte un ejemplo simple. Cuando desee conectarse a, digamos, Facebook.com, simplemente escriba lo mismo en la barra de URL. Por lo tanto, esta conexión que acaba de crear no solo es creada por el DNS. Todo esto está configurado a través de la programación de socket python. Los sockets deciden cómo se comunican dos redes. Cualquier comunicación que atraviese una red, puede ser un video, conexiones VOIP o solo texto; Todo pasa por un enchufe. Ahora que sabemos qué son los sockets, desarrollemos nuestro propio socket en python.

Fuente de la imagen: pixabay.com

Tipos de programación de socket de Python

Ahora hay un montón de enchufes por ahí. Pero no hablaremos de todos ellos, ya que no puedo cubrir todos y cada uno de ellos aquí. Puede crear un socket UDP, un socket TCP o incluso un socket de puerto y hay muchos más si continúo. Pero buscaría más en los sockets TCP y UDP hoy, ya que son los más básicos y pueden ser extremadamente buenos como punto de partida para comenzar con la programación de Python Socket.

  • Programación de sockets UDP

User Datagram Protocol o su comúnmente conocido como UDP es un protocolo alternativo a TCP que transfiere paquetes de un host a otro. Pero a diferencia del TCP (protocolo de control de transmisión), UDP es un protocolo sin conexión y no está orientado a la transmisión. Esto significa que el servidor UDP solo capturará los paquetes entrantes de todo el host sin identificar una conexión de origen confiable. Usaremos la función socket.socket para hacer esto. Se crea un socket UDP simple de la siguiente manera en Python:

import socket #importing import socket module from python library # Ahora necesitamos crear AF_INET y sock dgram socketss = socket.socket (socket.AF_INET, socket.SOCK_DGRAM) print "Socket Creation Successful"

Si. Eso es todo y hemos creado un socket UDP simple aquí en Python. Python Socket Programming o incluso crear un socket simple no es ciencia espacial. Sin embargo, el gran problema radica en la codificación del Servidor UDP y el Cliente. Como los sockets UDP no tienen conexión, las comunicaciones se inician con las funciones de socket de envío y recepción. Estas funciones no requieren que se conecten entre sí. De hecho, pueden enviar y recibir paquetes desde cualquier fuente aleatoria. Así es como se crea un servidor UDP:

import socketport = 2924s = socket.socket (socket.AF_INET, socket.SOCK_DGRAM) s.bind (("", port)) print "Solicitando conectividad al puerto en la máquina", puerto

mientras que 1:

datos, dirección = s.recvdesde (1024)

imprimir datos

Esto puede no parecer mucho, pero así es como se crea realmente. Uno puede usar cualquier puerto aquí. Acabo de elegir uno aleatorio como 2924. El servidor UDP necesita un puerto abierto para enviar y recibir conexiones entrantes. No se escucha el puerto ni se aceptan conexiones o solicitudes. Simplemente sucede sin ninguna autenticación. Intente ejecutar el servidor anterior en una terminal y vea cómo funciona.

Este es solo un servidor UDP simple que hemos creado. Vamos a hacerlo un poco más interesante y también un poco más complicado:

"'Este es un servidor de socket UDP simple"' import socketimport sys

HOST = "" # Uno puede probar todas las interfaces disponibles aquí

PORT = 2924 # Cualquier puerto aleatorio que no se usa por defecto en Windows o distribuciones de Linux

# Codificación del zócalo UDP

tratar :

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

imprimir "Enchufe inicializado" '

excepto socket.error, msg:

print “La creación del socket falló. Se produjo el siguiente error: "+ str (msg (0)) + 'Mensaje' + msg (1)

sys.exit ()

# Ahora tenemos que vincular este socket al host y puerto anteriores

tratar:

s.bind ((HOST, PORT))

excepto socket.error, msg:

print “Enchufe de enlace fallido. El siguiente error interrumpió el enlace: "+ str (msg (0)) + 'Mensaje' + msg (1)

sys.exit ()

imprimir 'Enchufe completado'

#Mantener la conexión establecida

mientras que 1:

# capturar datos del cliente utilizando datos variables y dirección

d = s.recvdesde (1024)

datos = d (0)

dirección = d (1)

si no datos:

descanso

responder = 'OK …' + datos

s.sendto (respuesta, dirección)

print 'Mensaje simbólico (' + dirección (0) + ':' + str (dirección (1)) + ') -' + data.strip ()

s.close ()

Ejecute el programa anterior e iniciará un servidor UDP en el puerto 2924. Felicidades, ha creado con éxito un Socket en Python. Y asegúrese de tener en cuenta que, un servidor UDP puede manejar cargas de clientes a diferencia del servidor TCP, la razón principal es que no hay conectividad fija en un servidor UDP como en el caso de un servidor TCP.

Cursos recomendados

  • Curso de certificación en depuración de Ruby
  • Curso PHP MySQL
  • Curso de certificación de programación VB.NET
  • Entrenamiento completo de la Fundación ITIL
  • Programación del cliente UDP

Ahora que hemos creado con éxito un servidor UDP, necesitamos un cliente para establecer una conexión adecuada para que sepamos que funciona. Entonces, trabajemos para crear un cliente UDP adecuado en Python. Este cliente se conectará a nuestro servidor UDP que creamos anteriormente:

"'Crear un cliente UDP simple usind sockets' 'import socketimport sys

# Crear un socket UDP

tratar:

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

excepto socket.error:

imprimir 'Error al crear el socket'

sys.exit ()

host = '127.0.0.1'; # También puede intentar usar localhost insead de esta IP, ambos son lo mismo.

puerto = 2924;

mientras que (1):

msg = raw_input ('Escriba un mensaje para enviar al servidor:')

tratar :

# Ahora necesitamos establecer las cuerdas

s.sendto (msg, (host, puerto))

# Ahora necesitamos recibir datos y direcciones del cliente usando datos y direcciones

d = s.recvdesde (1024)

respuesta = d (0)

dirección = d (1)

print 'La respuesta del servidor es:' + respuesta

excepto socket.error, msg:

print 'Siguiente error aparecido:' + str (msg (0)) + 'Mensaje' + msg (1)

sys.exit ()

Sip. Crear un cliente UDP en la programación de Python Socket es mucho más fácil que crear un servidor UDP. Pero así es como va. No creo que necesite explicar nada del código anterior, ya que ya he mencionado todas las cosas requeridas en los comentarios de la etiqueta #. Solo asegúrese de que la dirección IP y el puerto que ha ingresado sean correctos y que su firewall no esté bloqueando la conexión; de lo contrario, siempre se producirá una falla, pase lo que pase.

  • Programación de socket TCP

Ahora que hemos aprendido cómo crear un cliente y servidor UDP, echemos un vistazo a la programación de sockets TCP. Usaremos la misma función socket.socket para crear un socket TCP aquí.

importar socket # Importar el socket del módulo de las bibliotecas de python # crear un AF_INET y transmitir socketss = socket.socket (socket.AF_INET, socket.SOCK_STREAM) imprimir 'Socket Creation Successful'

Aquí, AF_INET se usa para la conexión de direcciones Ipv4, y la secuencia de calcetines es un protocolo orientado a TCP. Este es un socket TCP simple que hemos creado. Ahora, crearemos una versión avanzada de lo mismo. También incluiremos excepciones aquí, de la misma manera que lo hicimos al crear servidores y clientes UDP para que, en caso de que falle la conectividad, sepamos dónde se encuentra el programa real. Socket.error se usará para manejar todos estos errores similares a los de la programación UDP.

Así que ahora creemos un socket con el manejo de errores anterior y conectemos al host facebook.com. Así es como debe hacerse:

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

excepto socket.error, msg:

print 'La creación del socket falló. Se produjo el siguiente error: '+ str (msg (0)) +', Mensaje de error: '+ msg (1)

sys.exit ();

imprimir 'Creación de socket exitosa'

host = 'www.facebook.com'

puerto = 2924

tratar:

remote_ip = socket.gethostbyname (host)

excepto socket.gaierror:

print 'Nombre de host incorrecto. Saliendo …

sys.exit ()

print ”+ host + dirección IP 'is' + remote_ip

s.connect ((remote_ip, puerto))

imprima 'Socket Connected to' + host + 'on ip' + remote_ip

Ahora esto es suficiente si solo necesitamos poner en marcha una conexión. Pero ese no es nuestro objetivo. Tenemos la intención de crear una conexión donde podamos enviar y recibir datos también en ambos extremos. Podemos enviar datos utilizando la función sendall. Así que así es como va:

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

excepto socket.error, msg:

print 'La creación del socket falló. Se produjo el siguiente error: '+ str (msg (0)) +', Mensaje de error: '+ msg (1)

sys.exit ();

imprimir 'Creación de socket exitosa'

host = 'www.facebook.com'

puerto = 2924

tratar:

remote_ip = socket.gethostbyname (host)

excepto socket.gaierror:

print 'Nombre de host incorrecto. Saliendo …

sys.exit ()

print ”+ host + dirección IP 'is' + remote_ip

s.connect ((remote_ip, puerto))

imprima 'Socket Connected to' + host + 'on ip' + remote_ip

#transferencia de datos utilizando la función sendall

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

tratar :

s.sendall (mensaje)

excepto socket.error:

#Envio fallido

imprimir 'Fallo de transmisión'

sys.exit ()

imprima 'Estado del mensaje: Enviado'

Ahora que hemos creado una conexión exitosa y también podemos enviar los datos, echemos un vistazo a cómo podríamos recibir los datos por completo. Así es como va:

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

excepto socket.error, msg:

print 'La creación del socket falló. Se produjo el siguiente error: '+ str (msg (0)) +', Mensaje de error: '+ msg (1)

sys.exit ();

imprimir 'Creación de socket exitosa'

host = 'www.facebook.com'

puerto = 2924

tratar:

remote_ip = socket.gethostbyname (host)

excepto socket.gaierror:

print 'Nombre de host incorrecto. Saliendo …

sys.exit ()

print ”+ host + dirección IP 'is' + remote_ip

s.connect ((remote_ip, puerto))

imprima 'Socket Connected to' + host + 'on ip' + remote_ip

#transferencia de datos utilizando la función sendall

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

tratar :

s.sendall (mensaje)

excepto socket.error:

#Envio fallido

imprimir 'Fallo de transmisión'

sys.exit ()

imprima 'Estado del mensaje: Enviado'

# Ahora para recibir datos, utilizamos la función recv para lograrlo

respuesta = s.recv (4096)

imprimir respuesta

Lo último es que necesitamos cerrar el socket, lo que podríamos hacer con el siguiente código:

s.close ()

Y finalmente, la parte vinculante. Podemos usar la función bind para unir sockets con direcciones IP y puertos.

import socketimport sysHOST = ”# Esta es la misma manera que lo hicimos en el protocolo UDPPORT = 2924 # puerto para acceder a los datos.

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

imprimir 'Creación de socket exitosa'

tratar:

s.bind ((HOST, PORT))

excepto socket.error, msg:

print 'El enlace ha fallado. Error de seguimiento ocurrido '+ str (mensaje (0)) +' Mensaje '+ mensaje (1)

sys.exit ()

imprimir 'Enlace de socket exitoso'

Ahora, necesitamos escuchar las conexiones entrantes si necesitamos que el servidor se conecte. Esto se puede hacer con el siguiente comando simple:

s.listen (10) print 'Listener inició'

Y finalmente, necesitamos crear un socket para aceptar estas conexiones:

import socketimport sysHOST = ”PORT = 2924

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

imprimir 'Creación de socket exitosa'

tratar:

s.bind ((HOST, PORT))

excepto socket.error, msg:

print 'El enlace ha fallado. Error de seguimiento Ocurrió '+ str (mensaje (0)) +' Mensaje '+ mensaje (1)

sys.exit ()

imprimir 'Encuadernación de socket exitosa'

en la lista (10)

imprimir 'Escucha escuchado'

# Aceptando conexiones

conn, addr = s.accept ()

# Proporcionar información del cliente conectado

print 'Conexión establecida con' + addr (0) + ':' + str (addr (1))

En realidad hay mucho más para esto. También podemos escribir códigos para manejadores y otras cosas. Pero creo que esto sería todo por ahora. Asegúrese de tener estos conceptos básicos correctos, después de lo cual las partes restantes son simplemente pan comido para aprender.

Primera fuente de imagen: pixabay.com

Artículos relacionados:-

Aquí hay algunos artículos que lo ayudarán a obtener más detalles acerca de la Programación de Socket de Python, así que solo vaya al enlace.

  1. Las 25 preguntas y respuestas más sorprendentes de la entrevista de Python
  2. Carrera profesional en Python
  3. ¿Cuáles son los beneficios y las limitaciones de usar Python?
  4. Diferencia importante Python vs Ruby Performance
  5. Introducción a la programación de sockets en PHP
  6. Programación de sockets en Java | Método de clase de enchufe