Bibliotecas de redes multiplataforma de encabezado C99 de un solo archivo.
Biblioteca | Descripción | LOC | Última versión |
---|---|---|---|
udp.h | Servidor y Cliente asíncrono en una conexión UDP, útil para VOIP y servidores de juegos. | 573 | 1.0.0 |
https.h | Cliente HTTPS y HTTP asíncrono que utiliza 1 llamada de función para emitir una solicitud GET. | 438 | 1.0.0 |
Todo lo que necesita hacer para usar esta biblioteca es descargarla y colocarla en el mismo directorio que su código fuente, y luego buscar la función que define en la parte superior (las exportaciones) y el ejemplo proporcionado. Pon esto en la parte superior de donde quieras usarlo:
#define UDP_IMPLEMENTATION // or HTTPS_IMPLEMENTATION
#include "udp.h" // or "https.h"
u, opcionalmente, colóquelo solo en un archivo fuente y compílelo por separado.
Aquí hay una introducción simple a cada una de las bibliotecas:
#include <stdio.h>
#define UDP_IMPLEMENTATION
#include "udp.h"
int main () {
udp_conn * client = udp_connect ( udp_resolve_host ( "localhost" , "30000" , true, & ( udp_addr ){}), false);
if ( client -> error ) {
printf ( "Error %d: %sn" , client -> error , udp_error_str ( client -> error ));
return 1 ;
}
udp_send ( client , "Hello from client!" , sizeof ( "Hello from clie16!" ));
while (! udp_recv ( client )); // Wait for a response from the server.
printf ( "Received "%.*s"n" , ( int ) client -> data_len , ( char * ) client -> data );
udp_close_n_free ( client );
}
Las funciones udp_recv()
y udp_recv_from()
no son bloqueantes y devuelven la respuesta en la estructura udp_conn
, que contiene un buffer con los datos y la longitud. Puedes colocar estas funciones en cualquier lugar, incluso dentro del bucle del juego, ¡y se encargará de resolver las solicitudes en segundo plano antes de que estés listo para leer!
#include <stdio.h>
#define HTTPS_IMPLEMENTATION
#include "include/https.h"
int main () {
https_req * req = https_get ( "https://picsum.photos/600/800" ); // http works too!
while ( req -> state == HTTPS_PENDING ); // Sleep(20); // Wait for the request to complete.
if ( req -> state != HTTPS_COMPLETE ) {
printf ( "Failed to get responsenStatus Code: %dnReason: %s" , req -> status_code ,
req -> req_failed_reason );
https_free ( req );
return 1 ;
}
printf ( "Status: %dn" , req -> status_code );
printf ( "Response Size: %un" , req -> data_len );
printf ( "Response: %.256sn" , ( char const * ) req -> data );
https_free ( req );
}
¡Consulte el servidor y cliente UDP VOIP multiplataforma de 200 líneas en el directorio voip!
Hay más ejemplos en el directorio de ejemplos. Los más notables son el servidor UDP y el cliente HTTPS.
Estas bibliotecas están diseñadas para ser eficientes y fáciles de usar al mismo tiempo. Puntos de referencia próximamente™.
La biblioteca UDP es solo un contenedor de las llamadas al sistema nativo, lo que la hace tan rápida como cualquier otra biblioteca UDP.
La biblioteca HTTPS es tan rápida como cURL y admite muchas solicitudes simultáneas casi sin gastos generales.
udp.h
es compatible con todos los sistemas con sockets BSD, no utiliza funciones específicas de Linux o Windows. https.h
es actualmente un contenedor para WinHTTP, por lo que solo se admite Windows, pero la compatibilidad con cURL llegará pronto.
Todas estas bibliotecas tienen doble licencia según la licencia MIT y el dominio público. Podrás elegir la licencia que mejor se adapte a tu proyecto. La licencia MIT es una licencia permisiva, breve y directa. La licencia de dominio público es una licencia que pone el software a disposición del público de forma gratuita y sin derechos de autor.
- Hay muchas alternativas como cute_tls y cute_net de cute_headers. ¿Por qué debería utilizar Cozyweb?
Mis experiencias usando cURL, cute_headers y muchas otras soluciones para interactuar con la web en C no fueron divertidas, especialmente en programas y juegos casuales. La mayoría de las bibliotecas tenían un montón de texto estándar y aplicaban un montón de restricciones incluso para realizar una simple solicitud HTTP. Estaba buscando una solución simple que no me distrajera tratando de descubrir la semántica de la biblioteca y la web cada vez que quería hacer algo simple, y viniendo de otros lenguajes con API HTTPS simples vi mucho margen de mejora. . cozyweb
será el conjunto de bibliotecas C más simple que puede utilizar para interactuar con la web y obtener recursos o archivos para sus juegos o programas casuales.
- Estas bibliotecas no se ajustan a mis necesidades. ¿Cuáles son algunos otros?