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
|
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 :
En la terminal telnet obtendrás esto:
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:
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