API de sockets BSD en C++
Use socket, bind, listen, accept, connect, send y recv en programas de C++.
API de sockets BSD en C++ 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 la API de sockets?
La API de sockets de BSD es el estándar de facto para la programación de redes. Está disponible en Linux, macOS y los sistemas BSD, y también en Windows (con pequeños ajustes) mediante Winsock.
Cabeceras necesarias
Incluya las cabeceras de la plataforma y utilice tipos POSIX.
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>Creación de un socket
La llamada socket devuelve un descriptor de archivo. Pase la familia (IPv4), el tipo (TCP o UDP) y el protocolo (0 para usar el valor predeterminado).
int sock = socket(AF_INET, SOCK_STREAM, 0);
if (sock < 0) {
perror("socket");
return 1;
}Estructuras de direcciones
struct sockaddr_in contiene una dirección IPv4 y un puerto. Haga una conversión a struct sockaddr* al pasarlo a las funciones.
struct sockaddr_in addr{};
addr.sin_family = AF_INET;
addr.sin_port = htons(8080);
inet_pton(AF_INET, "127.0.0.1", &addr.sin_addr);Orden de bytes: host frente a red
El orden de bytes de red es big-endian. Utilice htons, htonl, ntohs y ntohl para realizar la conversión.
Conexión de un cliente
Utilice connect para iniciar una conexión TCP.
if (connect(sock, (sockaddr*)&addr, sizeof(addr)) < 0) {
perror("connect");
close(sock);
return 1;
}Envío y recepción
send y recv intercambian bytes. Ambas pueden devolver menos bytes de los solicitados; repita siempre la operación en un bucle.
const char* msg = "Hello";
send(sock, msg, strlen(msg), 0);
char buffer[1024];
ssize_t n = recv(sock, buffer, sizeof(buffer)-1, 0);
buffer[n] = '\0';Enlace y escucha (servidor)
Un servidor se enlaza a una dirección, escucha y acepta conexiones.
int srv = socket(AF_INET, SOCK_STREAM, 0);
bind(srv, (sockaddr*)&addr, sizeof(addr));
listen(srv, 10);
int client = accept(srv, nullptr, nullptr);Cierre del socket
Llame a close en Unix o a closesocket en Windows.
close(sock);Gestión de errores
Las funciones de sockets devuelven -1 cuando se produce un error y establecen errno. Compruebe cada valor devuelto.
Encapsulación con RAII
Los descriptores de archivo sin encapsular se pueden filtrar fácilmente. Encapsúlelos en un tipo RAII cuyo destructor llame a close, o utilice std::unique_ptr con un eliminador personalizado.
struct SocketCloser {
void operator()(int* fd) const { if (*fd >= 0) ::close(*fd); }
};
using UniqueSocket = std::unique_ptr<int, SocketCloser>;Diferencias en Windows
En Windows:
- Incluya
<winsock2.h>y enlacews2_32 - Llame a
WSAStartupantes de utilizar los sockets - Utilice
closesocketen lugar declose - El tipo de socket es
SOCKET(sin signo)
Comprobación rápida
¿Qué llamada de función inicia una conexión TCP desde un cliente a un servidor?
Resumen
La API de sockets de BSD ofrece primitivas de red de bajo nivel. Cree un socket y configure una dirección; después, conéctelo (cliente) o enlácelo, póngalo a escuchar y acepte conexiones (servidor). Convierta el orden de bytes con la familia de funciones htons. Encapsule los descriptores con RAII para evitar filtraciones.
Preguntas frecuentes
¿La lección «API de sockets BSD en C++» es gratis?
Sí — el texto completo de «API de sockets BSD en C++» 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 «API de sockets BSD en C++»?
Use socket, bind, listen, accept, connect, send y recv en programas de C++. 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 «API de sockets BSD en C++»?
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
- API de sockets BSD en C++
- Construcción de un servidor TCP de eco
- E/S asíncrona con epoll y kqueue
- Uso de Boost Asio para E/S asíncrona moderna