Introducción a la programación de sockets en Python

En la programación de sockets, la comunicación se establece a través de una red entre dos sockets (nodos). El servidor actúa como el puerto de escucha que escucha en una IP particular y el socket del cliente llega al socket del servidor para comunicarse. Para trabajar en la programación de sockets, tendremos que importar la biblioteca de sockets que proporciona python.

Python Socket Server

Un socket es un punto final para enviar o recibir datos, por lo tanto, necesitamos un servidor y un programa de socket de cliente para este propósito. Para nuestro programa de ejemplo, alojaremos el servidor y el cliente en la misma máquina. Incluso podemos enviar y recibir a través de un código de servidor. Cabe señalar que podemos tener un solo programa de servidor, mientras que podemos tener múltiples programas de cliente.

El Protocolo de control de transmisión (TCP) es el protocolo predeterminado que se elige. TCP es confiable ya que los paquetes que se descartan en la red son detectados y transmitidos por el remitente. TCP también proporciona la entrega de datos en orden, es decir, el orden en que es enviado por el remitente en un orden similar que la aplicación lee.

server.py

Echa un vistazo al siguiente programa: server.py

Línea 3: Socket es una biblioteca preinstalada y se creará un objeto para eso. Este módulo de socket se importa en el programa python y se usará como función de socket más adelante en el programa. Estamos creando un objeto aquí, que llamará a la función de socket.

Línea 4: socket.AF_INET corresponde a IPV4 (si se desea utilizar IPV6, se puede usar socket.AF_INET6. Esto se refiere a la familia de socket. AF_INET especifica el protocolo que se utilizará para la comunicación. IPV4 e IPV6 son diferentes controles de transmisión formas o protocolos de transmisión de datos a través de la red.

IPV4 e IPV6 son solo diferentes tipos de direcciones IP. El socket.AF_INET corresponde a TCP. El Protocolo de control de transmisión (TCP) funciona con la IP y define cómo la computadora envía paquetes de datos entre sí.

A continuación, lo que se necesita es TCP para eso necesitaremos un socket.SOCK_STREAM, que es el tipo de socket. TCP es un protocolo orientado a la conexión, esencialmente implica realizar una conexión de enlace de tres vías con un servidor y un cliente. Luego proporcionamos un nombre de host donde se conectará el cliente.

Línea 5: Para el nombre de host, "localhost" o "127.0.01" o socket.gethostname (), se puede usar cualquiera de estos. Obtiene la dirección IP del servidor.

Los anteriores son los dos parámetros que definimos para el socket.

Línea 6: Por lo general, tenemos muchos puertos en nuestro sistema, por lo que debemos utilizar un puerto host no utilizado. Se puede usar cualquier cuatro dígitos, ya que la mayoría de los dígitos inferiores están ocupados.

Línea 7: El método bind (), que une el host y el puerto a un socket.

Todos estos pasos son necesarios para iniciar nuestro servidor. Ahora, necesitamos hacer el cliente. Como se mencionó anteriormente, podemos tener múltiples clientes.

Línea 8: Tenemos la opción de mencionar el número de clientes que pueden interactuar con el servidor. Esto se logra mediante s.listen (6). Inicia el escucha TCP. El numérico representa el número de clientes que pueden interactuar. Si, por ejemplo, llega el cliente, se descartará.

Línea 9: s.accept () aceptará la solicitud del cliente y devolverá dos objetos, uno es el objeto socket-client y el otro es la dirección. La dirección IP será la dirección del cliente donde nuestro cliente está presente.

Línea 10: es más como una notificación al servidor sobre la conexión que se ha establecido.

Por último, imprimimos una declaración que debe mostrarse cuando ambos programas se ejecutan en el terminal. Una vez que hayamos terminado con nuestro programa de servidor, escribiremos el programa del cliente.

Python Socket Client

Aquí discutimos sobre el cliente de socket python:

cliente.py

Aquí está nuestro programa para el cliente: client.py

El programa cliente también tiene un socket similar, como vemos en el caso del programa servidor. Por lo general, el programa cliente se ejecuta desde el programa del servidor. No está en la misma máquina que tenemos en este ejemplo aquí. Con los sockets, lo que pretendemos lograr es comunicarnos a través de programas de Python en una máquina localmente conectada en red o incluso en una red remota.

Línea 8: Hay un método vinculante () en el programa del servidor, aquí usará el método connect (). La tupla aquí tomará host y puerto en el método. Tomamos el mismo puerto que habíamos usado en nuestro server.py

Necesitamos ejecutar server.py y client.py en diferentes terminales y así es como veremos que se produce la conexión.

Salida:

La captura de pantalla es de dos terminales diferentes, uno abierto en CMD y el otro abierto en PowerShell en Windows. La ventana izquierda abre el programa server.py y el terminal de la derecha abre el programa client.py.

Vemos la salida impresa en el terminal del lado del servidor.

Enviar cadena de un archivo a otro archivo

Intentaremos enviar un mensaje desde el lado del cliente al lado del servidor. Escribiremos un mensaje en el programa client.py.

1. client.py

Aquí está nuestro programa para el cliente: client.py

Línea 9 y Línea 10: configuramos el mensaje en una variable y enviamos el mensaje en forma de bytes y lo convertimos o codificamos en formato UTF-8. (UTF es un estándar Unicode, ya que todos los contenidos del mensaje son caracteres y están incluidos en el gráfico Unicode). Se supone que codificamos y mantenemos los datos lo más pequeños posible, de lo contrario la transmisión podría fallar en algún momento.

Línea 11: cerramos la conexión.

En el programa del servidor, haremos los siguientes cambios.

2. server.py

Aquí está nuestro programa para el servidor: server.py

Línea 11: para construir la conexión, utilizamos el objeto de cliente de socket. Estamos mencionando el tamaño del búfer agregando 1024 bytes (1 KB) al método y lo mantenemos en el mensaje variable.

Línea 13: Luego estamos imprimiendo el método.

Salida:

Abrimos nuevamente los terminales y vemos la siguiente salida.

Conclusión: programación de sockets en Python

Aquí se han cubierto los conceptos básicos de la programación de sockets, pero hay que tener en cuenta que es un dominio masivo y hay muchas más cosas que cubrir en la programación de sockets. Comprender bien los conceptos básicos ayudaría a lidiar con escenarios complejos de cliente-servidor.

Artículos recomendados

Esta es una guía para la programación de sockets en Python. Aquí discutimos el concepto de servidor de socket python y cliente de socket python con implementación de código. También puede consultar los siguientes artículos para obtener más información:

  1. Bucles anidados de Python
  2. Las 15 características principales de Python
  3. Los 7 mejores IDE de Python para Windows
  4. Diferentes métodos en conjuntos de Python