d5250fff74d94d89e872c18359d75e43b29edf57
NetraLib
c/c++基本开发库
TCP 服务端操作
包括多线程客户端连接,指定客户端数据的收发等等功能
Linux 中屏蔽所有信号操作
屏蔽所有信号,以防止意外退出
写文件操作
允许原文本进行覆盖写,追加写 允许二进制进行覆盖写,追加写 允许在特定位置后面进行插入覆盖操作 允许删除特定字段后面所有内容在进行写操作 可以根据需要计算特定符号最后一个字节或者第一个字节所在位置所在位置
所有操作都添加mutex锁机制 ,保障线程安全
读文件操作
支持全文读取(文本和二进制模式) 支持按行读取文本内容 支持按指定字节数读取数据 支持计算第一个指定字节序列结束位置(包含该序列本身)的字节数 提供文件是否存在和文件大小查询 支持重置文件读取位置,实现多次读取
所有操作都添加mutex锁机制 ,保障线程安全
字符串操作
支持左右空格删除 支持格式化输出
Http请求
提供基于 cpp-httplib
的简易 HTTP 客户端封装 NetRequest
,支持:
- 同步/异步 GET、POST(JSON、表单)
- 连接/读写超时设置、Keep-Alive
- 并发请求上限控制
- 可选内存缓存(GET 命中时不发起网络请求)
- 简单日志回调与性能统计
- 断点续传下载到本地文件
使用步骤:
- 引入头文件,配置目标地址
#include "NetRequest.hpp"
ntq::RequestOptions opt;
opt.scheme = "http"; // 或 https
opt.host = "127.0.0.1"; // 服务器地址
opt.port = 8080; // 端口(https 一般 443)
opt.base_path = "/api"; // 可选统一前缀
opt.connect_timeout_ms = 3000;
opt.read_timeout_ms = 8000;
opt.write_timeout_ms = 8000;
opt.default_headers = { {"Authorization", "Bearer TOKEN"} }; // 可选
ntq::NetRequest req(opt);
req.setMaxConcurrentRequests(4);
req.enableCache(std::chrono::seconds(10));
- 发送 GET 请求
auto r = req.Get("/info");
if (r && r->status == 200) {
// r->body 为返回内容
}
// 带查询参数与额外请求头
httplib::Params q = {{"q","hello"},{"page","1"}};
httplib::Headers h = {{"X-Req-Id","123"}};
auto r2 = req.Get("/search", q, h);
- 发送 POST 请求
// JSON(Content-Type: application/json)
std::string json = R"({"name":"orangepi","mode":"demo"})";
auto p1 = req.PostJson("/set", json);
// 表单(application/x-www-form-urlencoded)
httplib::Params form = {{"user","abc"},{"pwd","123"}};
auto p2 = req.PostForm("/login", form);
- 异步调用
auto fut = req.GetAsync("/info");
auto res = fut.get(); // 与同步用法一致
- 下载到本地(支持断点续传)
bool ok = req.DownloadToFile("/files/pkg.bin", "/tmp/pkg.bin", {}, /*resume*/true);
- 统计信息
auto s = req.getStats();
// s.total_requests / s.total_errors / s.last_latency_ms / s.avg_latency_ms
说明:
- 若使用 HTTPS,需在编译时添加
-DCPPHTTPLIB_OPENSSL_SUPPORT
并链接-lssl -lcrypto
,且将opt.scheme
设为"https"
、端口通常为443
。 base_path
与各函数传入的path
会自动合并,例如base_path="/api"
且Get("/info")
实际请求路径为/api/info
。
Description
Languages
C++
100%