Межплатформенные сетевые библиотеки с одним заголовком C99.
Библиотека | Описание | ЛОК | Последняя версия |
---|---|---|---|
udp.h | Асинхронный сервер и клиент по UDP-соединению, полезны для VOIP и игровых серверов. | 573 | 1.0.0 |
https.h | Асинхронный HTTPS и HTTP-клиент, использующий 1 вызов функции для выдачи запроса GET. | 438 | 1.0.0 |
Все, что вам нужно сделать, чтобы использовать эту библиотеку, это загрузить ее и поместить в тот же каталог, что и исходный код, а затем найти в ней функцию, которую она определяет вверху (экспорт), и предоставленный пример! Поместите это вверху того места, где вы хотите его использовать:
#define UDP_IMPLEMENTATION // or HTTPS_IMPLEMENTATION
#include "udp.h" // or "https.h"
или, опционально, поместите это отдельно в исходный файл и соберите отдельно.
Вот простое введение в каждую из библиотек:
#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 );
}
Функции udp_recv()
и udp_recv_from()
неблокирующие и возвращают ответ в структуре udp_conn
, которая содержит буфер с данными и длиной. Вы можете разместить эти функции где угодно, в том числе внутри игрового цикла, и они позаботятся о разрешении запросов в фоновом режиме, прежде чем вы будете готовы к чтению!
#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 );
}
Ознакомьтесь с 200-канальным кроссплатформенным UDP-сервером и клиентом VOIP в каталоге voip!
Больше примеров можно найти в каталоге примеров. Среди них следует отметить UDP-сервер и HTTPS-клиент.
Эти библиотеки созданы для того, чтобы быть эффективными и простыми в использовании одновременно. Скоро появятся тесты™.
Библиотека UDP — это всего лишь оболочка собственных системных вызовов, что делает ее такой же быстрой, как и любая другая библиотека UDP.
Библиотека HTTPS работает так же быстро, как cURL, и поддерживает множество одновременных запросов практически без накладных расходов.
udp.h
поддерживает все системы с сокетами BSD и не использует никаких специфических функций Linux или Windows. https.h
в настоящее время является оболочкой WinHTTP, поэтому поддерживается только Windows, но скоро появится поддержка cURL.
Все эти библиотеки имеют двойную лицензию: MIT License и Public Domain. Вы можете выбрать лицензию, которая лучше всего подходит для вашего проекта. Лицензия MIT — это разрешительная лицензия, короткая и по существу. Лицензия Public Domain — это лицензия, которая делает программное обеспечение доступным для общественности бесплатно и без каких-либо авторских прав.
- Существует множество альтернатив, таких как cute_tls и cute_net от cute_headers. Почему мне следует использовать CosyWeb?
Мой опыт использования cURL, cute_headers и многих других решений для взаимодействия с Интернетом на C не был интересным, особенно в казуальных программах и играх. Большинство библиотек имели массу шаблонов и налагали массу ограничений даже на простой HTTP-запрос. Я искал простое решение, которое не отвлекало бы меня от попыток выяснить семантику библиотеки и Интернета каждый раз, когда я хотел сделать что-то простое, и, исходя из других языков с простыми API-интерфейсами HTTPS, я видел много возможностей для улучшения. . cozyweb
будет самым простым набором библиотек C, который вы можете использовать для взаимодействия с Интернетом и получения ресурсов или файлов для ваших игр или казуальных программ.
- Эти библиотеки не соответствуют моим потребностям. Какие еще?