Esta página se tradujo automáticamente con la API de traducción de Google Cloud.
Algunas páginas se pueden leer mejor en su totalidad.
En este artículo, discutiremos los sockets de Linux y la programación de redes. Cubriremos qué son, cómo funcionan y algunos casos de uso comunes. También proporcionaremos algunos ejemplos de código en C para ilustrar cómo usarlos.
En las redes informáticas, un socket es un punto final de un canal de comunicación de datos bidireccional o unidireccional. Los sockets se pueden usar para establecer una conexión entre dos computadoras, que luego se pueden usar para intercambiar datos.
Los sockets pueden estar orientados a secuencias u orientados a datagramas. Los sockets orientados a flujo proporcionan una conexión confiable, ordenada y con verificación de errores entre dos computadoras. Los sockets orientados a datagramas, por otro lado, no tienen conexión y no garantizan que los datos se entreguen en el mismo orden en que se enviaron.
Los sockets funcionan mediante la creación de un objeto de socket en una computadora, que está vinculado a un número de puerto. Este objeto de socket se puede usar para conectarse a un socket en otra computadora, que también está vinculada a un número de puerto. Una vez que se establece una conexión, se pueden intercambiar datos entre las dos computadoras.
Hay muchas razones por las que podría querer usar sockets en sus aplicaciones. Algunos casos de uso comunes incluyen:
Aquí hay algunos ejemplos de código en C para ilustrar cómo usar sockets.
Para crear un socket, debe usar la función socket()
. Esta función toma tres argumentos:
AF_INET
para IPv4 o AF_INET6
para IPv6)SOCK_STREAM
para un socket orientado a secuencias o SOCK_DGRAM
para un socket orientado a datagramas)IPPROTO_TCP
para TCP o IPPROTO_UDP
para UDP)int sockfd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
Para conectarse a un socket, necesita usar la función connect()
. Esta función toma tres argumentos:
struct sockaddr *
)struct sockaddr_in addr;
addr.sin_family = AF_INET;
addr.sin_port = htons(80);
addr.sin_addr.s_addr = inet_addr("127.0.0.1");
connect(sockfd, (struct sockaddr *)&addr, sizeof(addr));
Para enviar datos, debe utilizar la función send()
. Esta función toma tres argumentos:
void *
)char buf[1024];
send(sockfd, buf, sizeof(buf), 0);
Para recibir datos, necesita usar la función recv()
. Esta función toma cuatro argumentos:
vacío *
)MSG_WAITALL
para esperar a que lleguen todos los datos)char buf[1024];
recv(sockfd, buf, sizeof(buf), MSG_WAITALL);
Para cerrar un socket, debe usar la función close()
. Esta función toma un único argumento:
close(sockfd);