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:
ServerSocketySocket
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:
DatagramSocketyDatagramPacket
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.