0Pricing
C Academy · Lección

Introducción a los sockets

Conceptos básicos de comunicación de red

Introducción a los sockets es una lección gratuita de C Academy en CoddyKit. Esta es la lección 1 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de C Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de C Academy incluye 4 lecciones en total.

Qué es un socket

Un socket es un extremo de comunicación de red. En los sistemas POSIX es un descriptor de archivo del que puede leer y en el que puede escribir, lo que permite que dos programas intercambien datos a través de una red o de la misma máquina.

El modelo cliente-servidor

La mayoría de las aplicaciones de red utilizan el modelo cliente-servidor:

  • El servidor se asocia a una dirección y espera conexiones
  • El cliente inicia una conexión con el servidor

Una vez conectados, ambos lados envían y reciben datos.

TCP frente a UDP

Hay dos protocolos de transporte principales:

  • TCP (SOCK_STREAM): fiable, ordenado y orientado a conexión
  • UDP (SOCK_DGRAM): rápido, sin conexión; puede perder o reordenar paquetes

Utilice TCP cuando necesite corrección y UDP para streaming de baja latencia.

Crear un socket

La llamada socket() devuelve un descriptor de archivo. Sus argumentos son la familia de direcciones (AF_INET para IPv4), el tipo (SOCK_STREAM para TCP) y el protocolo (0 para el valor predeterminado).

/* Conceptual: sockets need a network environment to run */
#include <sys/socket.h>
#include <netinet/in.h>

int create_tcp_socket(void) {
    int fd = socket(AF_INET, SOCK_STREAM, 0);
    /* fd < 0 means error; check with perror */
    return fd;
}

Estructuras de direcciones de socket

Una dirección IPv4 se describe mediante struct sockaddr_in, que contiene la familia, el puerto y la dirección IP. Las funciones reciben un struct sockaddr * genérico, por lo que debe realizar una conversión de tipo.

#include <netinet/in.h>

void fill_addr(struct sockaddr_in *addr, unsigned short port) {
    addr->sin_family = AF_INET;
    addr->sin_port = htons(port);      /* host to network short */
    addr->sin_addr.s_addr = INADDR_ANY; /* all interfaces */
}

El orden de los bytes importa

Las redes utilizan big-endian (orden de bytes de red). Realice la conversión con:

  • htons / htonl, de host a red (short/long)
  • ntohs / ntohl, de red a host

Convierta siempre los puertos y las direcciones; de lo contrario, se comunicará con el destino equivocado.

Conversión de direcciones IP

inet_pton convierte una IP de texto como "127.0.0.1" al formato binario almacenado en sin_addr, y inet_ntop realiza la conversión inversa para mostrarla.

#include <arpa/inet.h>
#include <netinet/in.h>

int set_ip(struct sockaddr_in *addr, const char *ip) {
    return inet_pton(AF_INET, ip, &addr->sin_addr); /* returns 1 on success */
}

Secuencia de llamadas del servidor

Normalmente, un servidor TCP realiza estas llamadas, en este orden:

  • socket(), crear
  • bind(), asociar a una dirección y un puerto
  • listen(), marcar como pasivo
  • accept(), obtener una conexión

Secuencia de llamadas del cliente

Un cliente TCP es más sencillo:

  • socket(), crear
  • connect(), conectarse a la dirección del servidor

Después puede utilizar send y recv en el mismo descriptor.

Enviar y recibir

Utilice send() y recv() (o las funciones genéricas write() y read()). Ambas pueden transferir menos bytes de los solicitados, por lo que el código real debe repetir la operación hasta procesar todos los datos.

Compruebe siempre los valores devueltos

Cualquier llamada de socket puede fallar. Un valor de retorno -1 establece errno; llame a perror para informar del error. Un recv de 0 significa que el extremo remoto cerró la conexión. La solidez de una red depende de la comprobación de errores.

Comprobación rápida

Compruebe su comprensión de los conceptos básicos de los sockets.

Resumen

Ha aprendido los fundamentos de la programación con sockets.

  • Un socket es un extremo de red y un descriptor de archivo
  • Modelo cliente-servidor con TCP (fiable) o UDP (rápido)
  • Utilice sockaddr_in con htons e inet_pton
  • Servidor: socket, bind, listen, accept. Cliente: socket, connect

Preguntas frecuentes

¿La lección «Introducción a los sockets» es gratis?

Sí — el texto completo de «Introducción a los sockets» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de C Academy, actualiza a CoddyKit PRO. El curso de C Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Introducción a los sockets»?

Conceptos básicos de comunicación de red Practicas C Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar C Academy?

No se requiere experiencia previa. C Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 1 de 4.

¿Cuánto tiempo toma la lección «Introducción a los sockets»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de C Academy?

Sí. Cada lección de C Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Introducción a los sockets
  2. Servidor TCP
  3. Cliente TCP
  4. Gestión de varios clientes
← Volver a C Academy