La programación de aplicaciones en red es un área de desarrollo que permite la comunicación entre dispositivos o sistemas a través de una red. Esto incluye desde el desarrollo de aplicaciones cliente-servidor hasta aplicaciones distribuidas o basadas en protocolos personalizados. En Python, existen múltiples librerías que facilitan la programación de aplicaciones en red. A continuación, te detallo los principales elementos y las librerías más comunes:
Protocolos de Comunicación:
Modelos de Comunicación:
Concurrencia y Paralelismo:
Seguridad:
import socket
# Crear un socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(('localhost', 12345))
s.listen(1)
print("Servidor esperando conexión...")
conn, addr = s.accept()
print(f"Conexión establecida con {addr}")
conn.send(b'Hola, Cliente!')
conn.close()
import asyncio
async def handle_client(reader, writer):
data = await reader.read(100)
print(f"Recibido: {data.decode()}")
writer.write(b"Respuesta del servidor")
await writer.drain()
writer.close()
async def main():
server = await asyncio.start_server(handle_client, '127.0.0.1', 8888)
async with server:
await server.serve_forever()
asyncio.run(main())
from http.server import SimpleHTTPRequestHandler, HTTPServer
server_address = ('', 8000)
httpd = HTTPServer(server_address, SimpleHTTPRequestHandler)
print("Servidor HTTP corriendo en el puerto 8000")
httpd.serve_forever()
import requests
response = requests.get('https://jsonplaceholder.typicode.com/posts/1')
print(response.json())
import asyncio
import websockets
async def handler(websocket, path):
message = await websocket.recv()
print(f"Recibido: {message}")
await websocket.send(f"Respuesta: {message}")
asyncio.get_event_loop().run_until_complete(
websockets.serve(handler, 'localhost', 8765)
)
asyncio.get_event_loop().run_forever()
import paramiko
ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect('hostname', username='user', password='password')
stdin, stdout, stderr = ssh.exec_command('ls')
print(stdout.read().decode())
ssh.close()
import zmq
context = zmq.Context()
socket = context.socket(zmq.REP)
socket.bind("tcp://*:5555")
while True:
message = socket.recv()
print(f"Recibido: {message}")
socket.send(b"Respuesta")
from scapy.all import *
packet = IP(dst="8.8.8.8")/ICMP()
response = sr1(packet, timeout=2)
if response:
print("Respuesta recibida")
socket
y luego avanza a bibliotecas más avanzadas.