Plattformübergreifende Netzwerkbibliotheken mit Einzeldatei-C99-Header.
Bibliothek | Beschreibung | LOC | Neueste Version |
---|---|---|---|
udp.h | Asynchroner Server und Client auf einer UDP-Verbindung, nützlich für VOIP und Spieleserver. | 573 | 1.0.0 |
https.h | Asynchroner HTTPS- und HTTP-Client, der einen Funktionsaufruf zum Ausgeben einer GET-Anfrage verwendet. | 438 | 1.0.0 |
Alles, was Sie tun müssen, um diese Bibliothek zu verwenden, ist, sie herunterzuladen und im selben Verzeichnis wie Ihren Quellcode abzulegen und dann nach der Funktion zu suchen, die sie oben definiert (die Exporte) und das bereitgestellte Beispiel! Platzieren Sie dies oben an der Stelle, an der Sie es verwenden möchten:
#define UDP_IMPLEMENTATION // or HTTPS_IMPLEMENTATION
#include "udp.h" // or "https.h"
Alternativ können Sie es auch einzeln in eine Quelldatei einfügen und separat erstellen.
Hier ist eine einfache Einführung in jede der Bibliotheken:
#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 );
}
Die Funktionen udp_recv()
und udp_recv_from()
sind nicht blockierend und geben die Antwort in der Struktur udp_conn
zurück, die einen Puffer mit den Daten und der Länge enthält. Sie können diese Funktionen überall platzieren, auch innerhalb Ihrer Spielschleife, und sie kümmert sich im Hintergrund um die Lösung von Anfragen, bevor Sie zum Lesen bereit sind!
#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 );
}
Schauen Sie sich den plattformübergreifenden UDP-VOIP-Server und -Client mit 200 Leitungen im VoIP-Verzeichnis an!
Weitere Beispiele finden Sie im Beispielverzeichnis. Bemerkenswert sind der UDP-Server und der HTTPS-Client.
Diese Bibliotheken sind so konzipiert, dass sie gleichzeitig effizient und benutzerfreundlich sind. Benchmarks folgen bald™.
Die UDP-Bibliothek ist lediglich ein Wrapper um die nativen Systemaufrufe, wodurch sie genauso schnell ist wie jede andere UDP-Bibliothek.
Die HTTPS-Bibliothek ist so schnell wie cURL und unterstützt viele gleichzeitige Anfragen nahezu ohne Overhead.
udp.h
unterstützt alle Systeme mit BSD-Sockets, es verwendet keine Linux- oder Windows-spezifischen Funktionen. https.h
ist derzeit ein Wrapper für WinHTTP, daher wird nur Windows unterstützt, cURL-Unterstützung folgt jedoch bald.
Diese Bibliotheken sind alle unter der MIT-Lizenz und der Public Domain doppelt lizenziert. Sie können die Lizenz auswählen, die am besten zu Ihrem Projekt passt. Die MIT-Lizenz ist eine freizügige Lizenz, die kurz und prägnant ist. Die Public Domain-Lizenz ist eine Lizenz, die die Software der Öffentlichkeit kostenlos und ohne Urheberrechte zur Verfügung stellt.
- Es gibt viele Alternativen wie „cute_tls“ und „cute_net“ von cute_headers. Warum sollte ich Cozyweb verwenden?
Meine Erfahrungen mit cURL, cute_headers und vielen anderen Lösungen für die Verbindung mit dem Web in C haben keinen Spaß gemacht, insbesondere bei Gelegenheitsprogrammen und Spielen. Die meisten Bibliotheken hatten eine Menge Boilerplate und erzwangen eine Menge Einschränkungen, selbst für das Senden einer einfachen HTTP-Anfrage. Ich war auf der Suche nach einer einfachen Lösung, die mich nicht davon ablenken lässt, jedes Mal, wenn ich etwas Einfaches tun wollte, die Semantik der Bibliothek und des Webs herauszufinden, und da ich aus anderen Sprachen mit einfachen HTTPS-APIs kam, sah ich viel Raum für Verbesserungen . cozyweb
wird der einfachste Satz von C-Bibliotheken sein, den Sie als Schnittstelle zum Web verwenden können, um Ressourcen oder Dateien für Ihre Spiele oder Gelegenheitsprogramme abzurufen.
- Diese Bibliotheken entsprechen nicht meinen Anforderungen. Was sind einige andere?