🌐 Pack de Estudio - Sockets y Servicios de Red

UF3: Programación en Red con Sockets (TCP/UDP) y Desarrollo de API REST con Spring Boot.

1. Programación con Sockets (TCP/UDP)

TCP (Protocolo de Control de Transmisión)

  • Orientado a Conexión (Requiere Handshake)
  • Fiable (Garantiza entrega y orden)
  • Más Lento (Mayor sobrecarga)
  • Clases clave: ServerSocket y Socket

UDP (Protocolo de Datagramas de Usuario)

  • Sin Conexión (No hay Handshake)
  • No Fiable (Sin garantía de entrega)
  • Más Rápido (Baja sobrecarga)
  • Clases clave: DatagramSocket y DatagramPacket

El método accept() en ServerSocket

Es un método bloqueante. El hilo de ejecución queda detenido hasta que un cliente se conecta al puerto del servidor.

Transferencia de Objetos (Serialización)

Para enviar objetos complejos a través de un Socket, la clase del objeto debe implementar la interfaz Serializable.

Flujo Lado Clase Java Método Clave
Envío (Serializar) Cliente ObjectOutputStream oos.writeObject(objeto)
Recepción (Deserializar) Servidor ObjectInputStream (MiObjeto) ois.readObject()

2. API REST y Spring Boot

Concepto Clave: API REST

Una API REST (Representational State Transfer) se basa en el protocolo HTTP, utiliza recursos (Endpoints) y es Stateless (sin estado).

Verbos HTTP (CRUD)

Verbo HTTP Operación CRUD Uso Típico
GET Read (Lectura) Obtener recursos (/productos, /productos/1)
POST Create (Creación) Crear un nuevo recurso. Envía datos en el Body.
PUT Update (Actualización total) Reemplazar un recurso existente (envío completo).
DELETE Delete (Borrado) Eliminar un recurso.
PATCH Update (Actualización parcial) Modificar campos específicos de un recurso.

Mapeo de Peticiones en Controller

Anotación Función Ejemplo de Uso
@GetMapping Mapea peticiones GET. @GetMapping("/productos")
@PathVariable Obtiene valores de la ruta (ej: /productos/1). @GetMapping("/{id}")
@RequestParam Obtiene valores de la query (ej: /prod?id=1). @GetMapping
@RequestBody Inyecta el cuerpo (Body/JSON) de la petición. @PostMapping o @PutMapping

Esquemas Visuales Clave

Diagrama 1: Flujo de Petición en API REST (Spring Boot)

CLIENTE (Postman / Web)
       | 🔄 HTTP GET /api/users/1
       V
   ┌──────────────────────────────────┐
   │ Controller (@RestController)     │
   │ 1. Mapea: @GetMapping("/{id}")   │
   │ 2. Extrae: @PathVariable Long id │
   │ 3. Llama a Service               │
   └──────────────────────────────────┘
           |
           V
   ┌─────────────────────────────────┐
   │ Service (@Service)              │
   │ 4. Lógica de Negocio (Validar)  │
   │ 5. Llama a Repository           │
   └─────────────────────────────────┘
           |
           V
   ┌─────────────────────────────────┐
   │ Repository (@Repository)        │
   │ 6. Acceso a BD (SELECT * ...)   │
   │ 7. Devuelve Entidad             │
   └─────────────────────────────────┘
           | 
           | ⬆️ Devuelve Respuesta (200 OK + JSON)
           V
CLIENTE

Diagrama 2: Three-Way Handshake de TCP (Conexión)

Servidor (ServerSocket)              Cliente (Socket)
     
        <-- (2) SYN + ACK <------------------ (1) SYN
        <------------------ (3) ACK
        
-- CONEXIÓN ESTABLECIDA (Ready for I/O) --

⚠️ Método `accept()` del servidor bloqueado en (2).

Tarjeta 1 de 0

Instrucciones: Responde a las 20 preguntas y haz clic en "Ver Resultado" al finalizar.
Instrucciones: Analiza el snippet de código y elige la opción que resuelve el error o completa la funcionalidad.
Instrucciones: Lee cada caso práctico y elige la mejor solución. Después de responder verás la explicación.