Programación de red Python

Python proporciona dos niveles de acceso a la programación de red. Estos son – 

  • Acceso de bajo nivel: en el nivel bajo, puede acceder al soporte de socket básico del sistema operativo. Puede implementar cliente y servidor tanto para protocolos orientados a conexión como sin conexión.
  • Acceso de alto nivel: En el nivel alto permite implementar protocolos como HTTP, FTP, etc.

En este artículo, discutiremos la programación de sockets de red. Pero antes de comenzar, comprendamos qué son los sockets.

¿Qué son los enchufes?

Considere un canal de comunicación bidireccional, los sockets son los puntos finales de este canal de comunicación. Estos sockets (puntos finales) pueden comunicarse dentro de un proceso, entre procesos en la misma máquina o entre procesos en diferentes máquinas. Los sockets utilizan diferentes protocolos para determinar el tipo de conexión para la comunicación puerto a puerto entre clientes y servidores.

Vocabulario de enchufes

Los sockets tienen su propio conjunto de vocabulario, echemos un vistazo a ellos: 

Término Descripción
Dominio El conjunto de protocolos utilizados para mecanismos de transporte como AF_INET, PF_INET, etc.
Escribe Tipo de comunicación entre sockets
Protocolo Identifica el tipo de protocolo utilizado dentro del dominio y el tipo. normalmente es cero
Puerto El servidor escucha a los clientes que llaman en uno o más puertos. puede ser una string que contenga un número de puerto, un nombre del servicio o un puerto Fixnum
nombre de host

Identifica una interfaz de red. puede ser un 

  • una string que contiene el nombre de host, la dirección IPv6 o una dirección de doble cuádruple.
  • un entero
  • una string de longitud cero
  • una string “<emisión>”

Programación de zócalos

La programación de sockets es una forma de conectar dos Nodes en una red para comunicarse entre sí. Un socket (Node) escucha en un puerto particular en una IP, mientras que el otro socket se comunica con el otro para formar una conexión. El servidor forma el socket de escucha mientras el cliente se comunica con el servidor. Son la columna vertebral real detrás de la navegación web. En términos más simples, hay un servidor y un cliente. Podemos usar el módulo de socket para la programación de socket. Para esto, tenemos que incluir el módulo de socket – 

import socket

para crear un socket tenemos que usar el método socket.socket(). 

Sintaxis:

socket.socket(socket_family, socket_type, protocol=0)

Dónde, 

  • socket_family: ya sea AF_UNIX o AF_INET
  • socket_type: SOCK_STREAM o SOCK_DGRAM.
  • protocolo: generalmente se omite, por defecto es 0.

Ejemplo:

Python3

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

Producción:

<socket.socket fd=74, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=(‘0.0.0.0’, 0)>

El módulo de socket proporciona varios métodos para la programación del lado del cliente y del servidor. Veamos cada método en detalle.

Métodos de servidor de socket

Estos métodos se utilizan en el lado del servidor. Veamos cada método en detalle – 

Nombre de la función Descripción
s.bind() Vincula la dirección al socket. La dirección contiene el par de nombre de host y el número de puerto.
escuchar() Inicia el oyente TCP
aceptar() Acepta pasivamente la conexión del cliente TCP y bloquea hasta que llega la conexión

Métodos de cliente de socket

Este método se utiliza en el lado del cliente. Veamos este método en detalle – 

Nombre de la función Descripción
s.conectar() Inicia activamente la conexión del servidor TCP

Métodos generales de socket

Estos son los métodos generales del módulo socket. Veamos cada método en detalle.

Nombre de la función Descripción
s.enviar() Envía el mensaje TCP
s.sendto() Envía el mensaje UDP
s.recv() Recibe el mensaje TCP
s.recvfrom() Recibe el mensaje UDP
cerrar() Cierra el zócalo
socket.nombrefantasma() Devuelve el nombre de host

Programa de cliente de servidor simple

Servidor

Un servidor tiene un método bind() que lo vincula a una IP y puerto específicos para que pueda escuchar las requests entrantes en esa IP y puerto. Un servidor tiene un método listen() que pone al servidor en modo de escucha. Esto permite que el servidor escuche las conexiones entrantes. Y por último, un servidor tiene un método accept() y close(). El método accept inicia una conexión con el cliente y el método close cierra la conexión con el cliente. 

Ejemplo: servidor de programación de red

Python3

# first of all import the socket library
import socket
 
# next create a socket object
s = socket.socket()
print ("Socket successfully created")
 
# reserve a port on your computer in our
# case it is 40674 but it can be anything
port = 40674
 
# Next bind to the port
# we have not typed any ip in the ip field
# instead we have inputted an empty string
# this makes the server listen to requests
# coming from other computers on the network
s.bind(('', port))
print ("socket binded to %s" %(port))
 
# put the socket into listening mode
s.listen(5)   
print ("socket is listening")
 
# a forever loop until we interrupt it or
# an error occurs
while True:
 
    # Establish connection with client.
    c, addr = s.accept()
    print ('Got connection from', addr )
 
    # send a thank you message to the client.
    c.send(b'Thank you for connecting')
 
    # Close the connection with the client
    c.close()

Explicación:

  • Hicimos un objeto socket y reservamos un puerto en nuestra pc.
  • Después de eso, vinculamos nuestro servidor al puerto especificado. Pasar una string vacía significa que el servidor también puede escuchar las conexiones entrantes de otras computadoras. Si hubiéramos pasado 127.0.0.1, habría escuchado solo aquellas llamadas realizadas dentro de la computadora local.
  • Después de eso, ponemos el servidor en modo de escucha. 5 aquí significa que 5 conexiones se mantienen en espera si el servidor está ocupado y si un sexto socket intenta conectarse, entonces se rechaza la conexión.
  • Por último, hacemos un ciclo while y comenzamos a aceptar todas las conexiones entrantes y cerramos esas conexiones después de un mensaje de agradecimiento a todos los enchufes conectados.

Cliente

Ahora necesitamos algo con lo que un servidor pueda interactuar. Podríamos acceder al servidor de esta manera solo para saber que nuestro servidor está funcionando. Escribe estos comandos en la terminal:

# start the server
python server.py

# keep the above terminal open
# now open another terminal and type:

telnet localhost 12345

Producción :

network programing server side

En la terminal telnet obtendrás esto:

network programming telnet server

Este resultado muestra que nuestro servidor está funcionando. Ahora para el lado del cliente: 

Ejemplo: Lado del cliente de programación de red

Python3

# Import socket module
import socket
 
# Create a socket object
s = socket.socket()
 
# Define the port on which you want to connect
port = 40674
 
# connect to the server on local computer
s.connect(('127.0.0.1', port))
 
# receive data from the server
print(s.recv(1024))
 
# close the connection
s.close()

Producción:

python network programming server clientpython network programming client side

Explicación:

  • Nos conectamos a localhost en el puerto 40674 (el puerto en el que se ejecuta nuestro servidor) y, por último, recibimos datos del servidor y cerramos la conexión.
  • Ahora guarde este archivo como client.py y ejecútelo desde la terminal después de iniciar el script del servidor.

Nota: Para obtener más información sobre la programación de sockets, consulte nuestro Tutorial de programación de sockets en Python

Publicación traducida automáticamente

Artículo escrito por nikhilaggarwal3 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *