单文件 C99 标头跨平台网络库。
图书馆 | 描述 | LOC | 最新版本 |
---|---|---|---|
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 );
}
查看voip目录中的200行跨平台UDP VOIP服务器和客户端!
示例目录中有更多示例。值得注意的是 UDP 服务器和 HTTPS 客户端。
这些库的设计既高效又易于使用。基准即将推出™。
UDP 库只是本机系统调用的包装器,这使得它与任何其他 UDP 库一样快。
HTTPS 库与 cURL 一样快,并且支持许多并发请求,几乎没有开销。
udp.h
支持所有带有 BSD 套接字的系统,它不使用 Linux 或 Windows 特定的函数。 https.h
目前是 WinHTTP 的包装器,因此仅支持 Windows,但 cURL 支持即将推出。
这些库均获得 MIT 许可证和公共领域的双重许可。您可以选择最适合您的项目的许可证。 MIT 许可证是一种简短而切题的宽松许可证。公共领域许可证是一种使软件免费向公众提供且没有版权的许可证。
- 有很多替代方案,例如cute_headers 的cute_tls 和cute_net。我为什么要使用 cosyweb?
我使用 cURL、cute_headers 和许多其他 C 语言与网络交互的解决方案的经历并不有趣,尤其是在休闲程序和游戏中。大多数库都有大量的样板文件,并且即使对于发出简单的 HTTP 请求也强制执行大量的限制。我一直在寻找一个简单的解决方案,每次我想做一些简单的事情时,它不会让我分心试图弄清楚库和网络的语义,并且来自具有简单 HTTPS API 的其他语言,我看到了很大的改进空间。 cozyweb
将是最简单的 C 库集,您可以使用它与网络交互,为您的游戏或休闲程序获取资源或文件。
- 这些库不符合我的需要。其他还有哪些?