Manufactura industrial
Internet industrial de las cosas | Materiales industriales | Mantenimiento y reparación de equipos | Programación industrial |
home  MfgRobots >> Manufactura industrial >  >> Industrial programming >> python

Programación de Redes en Python: Sockets y Protocolos Avanzados

Python proporciona dos niveles de acceso a servicios de red. A bajo nivel, puedes acceder al soporte básico de sockets del sistema operativo subyacente, permitiendo implementar clientes y servidores para protocolos orientados a conexión y sin conexión.

Python también tiene bibliotecas para acceso de alto nivel a protocolos de aplicación específicos como FTP, HTTP, etc.

Este capítulo cubre el concepto más famoso en redes: Programación de Sockets.

¿Qué son los Sockets?

Los sockets son los extremos de un canal de comunicaciones bidireccional. Pueden comunicarse dentro de un proceso, entre procesos en la misma máquina, o entre procesos en diferentes continentes.

Los sockets pueden implementarse sobre diferentes tipos de canal: sockets de dominio Unix, TCP, UDP, etc. La biblioteca socket proporciona clases específicas para transportes comunes e una interfaz genérica para el resto.

Vocabulario de Sockets

TérminoDescripción
Domain (Dominio)Familia de protocolos usada como mecanismo de transporte. Constantes: AF_INET, PF_INET, PF_UNIX, PF_X25, etc.
Type (Tipo)Tipo de comunicación: SOCK_STREAM (orientado a conexión, TCP) y SOCK_DGRAM (sin conexión, UDP).
Protocol (Protocolo)Normalmente cero, identifica variante de protocolo dentro de dominio y tipo.
HostnameIdentificador de interfaz de red: nombre de host, dirección IP (IPv4/IPv6), "<broadcast>", cadena vacía (INADDR_ANY), o entero (dirección binaria).
Port (Puerto)Cada servidor escucha en uno o más puertos. Número, cadena con número, o nombre de servicio.

El Módulo socket

Para crear un socket, usa socket.socket() del módulo socket:

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

Parámetros:

Una vez tienes el objeto socket, usa sus métodos para crear cliente o servidor.

Métodos de Socket Servidor

MétodoDescripción
s.bind()Vincula dirección (hostname, puerto) al socket.
s.listen()Configura e inicia listener TCP.
s.accept()Acepta pasivamente conexión TCP cliente (bloqueante hasta que llega conexión).

Métodos de Socket Cliente

MétodoDescripción
s.connect()Inicia activamente conexión TCP servidor.

Métodos Generales de Socket

MétodoDescripción
s.recv()Recibe mensaje TCP.
s.send()Transmite mensaje TCP.
s.recvfrom()Recibe mensaje UDP.
s.sendto()Transmite mensaje UDP.
s.close()Cierra el socket.
socket.gethostname()Retorna el nombre del host.

Servidor Simple

Para escribir servidores de Internet, usa socket del módulo socket para crear objeto socket, luego configura el servidor.

#!/usr/bin/python
# server.py
import socket

s = socket.socket()           # Crear objeto socket
host = socket.gethostname()   # Obtener nombre máquina local
port = 12345                  # Reservar puerto para servicio
s.bind((host, port))          # Vincular al puerto
s.listen(5)                   # Esperar conexión cliente

while True:
    c, addr = s.accept()      # Establecer conexión con cliente
    print('Got connection from', addr)
    c.send('Thank you for connecting')
    c.close()                 # Cerrar conexión

Cliente Simple

Programa cliente simple que abre conexión a puerto 12345 y host dado.

#!/usr/bin/python
# client.py
import socket

s = socket.socket()           # Crear objeto socket
host = socket.gethostname()   # Obtener nombre máquina local
port = 12345                  # Puerto del servicio
s.connect((host, port))       # Conectar al servidor
print(s.recv(1024))           # Leer datos del socket
s.close()                     # Cerrar socket

Ejecutar

# Iniciar servidor en background
$ python server.py &

# Ejecutar cliente
$ python client.py

Resultado:

Got connection from ('127.0.0.1', 48437)
Thank you for connecting

Módulos de Internet en Python

Lista de módulos importantes para programación de red/Internet:

ProtocoloFunción ComúnPuertoMódulo Python
HTTPPáginas web80httplib, urllib, xmlrpclib
NNTPNoticias Usenet119nntplib
FTPTransferencia de archivos20ftplib, urllib
SMTPEnvío de email25smtplib
POP3Recepción de email110poplib
IMAP4Recepción de email143imaplib
TelnetLíneas de comando23telnetlib
GopherTransferencia de documentos70gopherlib, urllib

Revisa las bibliotecas mencionadas para trabajar con FTP, SMTP, POP e IMAP.

Lecturas Adicionales

python

  1. Dominando tipos de datos en Python: Guía práctica
  2. Dominando operadores en Python: Guía completa
  3. Dominando la sentencia pass en Python: Guía práctica
  4. Dominando argumentos de funciones en Python: Posicionales, por palabra clave y por defecto
  5. Dominando Diccionarios en Python: Creación, Manipulación y Técnicas Avanzadas
  6. Dominando la Programación Orientada a Objetos en Python: Clases, Herencia, Encapsulación y Polimorfismo
  7. Dominando Iteradores en Python: Cómo Funcionan y Cómo Crear los Tuyos
  8. Explicación de Closures en Python: Cómo las Funciones Anidadas Capturan Variables
  9. Dominando datetime en Python: Guía Práctica de Fechas, Horas y Zonas Horarias
  10. Dominar time.sleep() en Python: Mejores Prácticas, Multihilo y Ejemplos Reales
  11. Programación Multihilo en Python: Técnicas Eficientes de Concurrencia