# 快速入门|Quickstart ## 安装 ### Windows ```cmd build.bat // 默认x64 build.bat x86 // 32位 build.bat arm64 // ARM64 ``` ### Linux/WSL ```bash ./build.sh # 默认x64 ./build.sh x86 # 32位 ./build.sh arm # ARM ./build.sh arm64 # ARM64 ``` ### 全架构构建 ```bash # Linux - 自动检测可用交叉编译工具链 ./build_all_linux.sh # Windows build_all_windows.bat ``` ## 第一个示例 ```c #include "netleaf.h" int main() { // 创建Web服务器 nl_web_server_t* server = nl_web_create(8080); // 添加页面 nl_web_add_html(server, "/", "

Hello NetLeaf!

"); // 启动服务器 nl_web_start(server); // 保持运行 while (1) { #ifdef _WIN32 Sleep(1000); #else sleep(1); #endif } return 0; } ``` ## 变量替换示例 ```c #include "netleaf.h" int main() { nl_web_server_t* server = nl_web_create(8080); // 设置编码 nl_web_set_encoding(server, "UTF-8"); // 定义变量 const char* vars[] = {"username", "age"}; const char* values[] = {"张三", "25"}; // 添加带变量的页面 nl_web_add_html_with_vars(server, "/profile", "

欢迎, {{username}}

\n" "

年龄: {{age}}

", vars, values, 2); nl_web_start(server); while (1) sleep(1); return 0; } ``` ## 输出结果 用户访问 `/profile` 时看到的HTML: ```html

欢迎, 张三

年龄: 25

``` **注意**: 变量在服务器端已被硬编码替换,用户使用F12开发者工具看不到原始变量名。 ## Vue.js支持 ```c #include "netleaf.h" int main() { nl_web_server_t* server = nl_web_create(8080); nl_web_add_vue(server, "/app", "
\n" "

{{ message }}

\n" " \n" "
"); nl_web_start(server); while (1) sleep(1); return 0; } ``` --- ## TLS 快速入门 ### 构建 TLS 扩展 ```powershell # 构建包含 TLS 的版本 mkdir build_with_tls cd build_with_tls cmake .. -DBUILD_TLS=ON cmake --build . --config Release ``` ### 第一个 TLS 程序 ```c #include "netleaf_tls.h" #include int main() { // 初始化 TLS nl_tls_init(); // 创建 TLS 上下文 nl_tls_ctx_t* ctx = nl_tls_create(); // 配置 TLS(加载 CA 证书) nl_tls_config_t cfg = {0}; cfg.ca_chain = "ca.crt"; cfg.verify_peer = 1; nl_tls_configure(ctx, &cfg); // 连接并握手 int sock = /* 已建立的 socket */; nl_tls_handshake(ctx, sock); // 安全通信 nl_tls_send(ctx, "Hello Secure!", 13); // 清理 nl_tls_close(ctx); nl_tls_destroy(ctx); nl_tls_shutdown(); return 0; } ``` ### 多语言错误消息 ```c #include "netleaf_tls.h" #include "netleaf_lang.h" #include int main() { nl_tls_init(); // 设置中文 nl_lang_set("zh_cn"); nl_tls_ctx_t* ctx = nl_tls_create(); nl_tls_config_t cfg = {0}; cfg.ca_chain = "nonexistent.crt"; // 故意使用错误路径 int ret = nl_tls_configure(ctx, &cfg); if (ret != NL_TLS_OK) { // 获取多语言错误消息 const char* msg = nl_lang_get_error(NL_LIB_TLS, ret); printf("错误: %s (原始码: %d)\n", msg, ret); // 输出: 错误: CA证书无效或不存在 (原始码: -2) } nl_tls_destroy(ctx); return 0; } ``` --- ## MQTT 快速入门 ### 构建 MQTT 客户端 ```powershell # 构建 MQTT(可选含 TLS) mkdir build_mqtt cd build_mqtt cmake .. -DBUILD_MQTT=ON -DBUILD_TLS=ON cmake --build . --config Release ``` ### 第一个 MQTT 程序 ```c #include "netleaf_mqtt.h" #include void on_message(void* ud, const nl_mqtt_msg_t* msg) { printf("Received: %.*s\n", (int)msg->payload_len, (char*)msg->payload); } int main() { // 初始化 nl_mqtt_init(); // 创建客户端 nl_mqtt_client_t* client = nl_mqtt_create(); // 连接 nl_mqtt_connect_opts_t opts = {0}; opts.client_id = "quickstart-client"; nl_mqtt_connect(client, "tcp://broker.hivemq.com:1883", &opts); // 订阅主题 nl_mqtt_subscribe(client, "test/topic", NL_MQTT_QOS_1, NULL); // 设置消息回调 nl_mqtt_set_msg_callback(client, on_message, NULL); // 发布消息 nl_mqtt_publish(client, "test/topic", "Hello MQTT!", 11, NULL); // 保持运行 while (1) { nl_mqtt_loop(client, 1000); } // 清理 nl_mqtt_disconnect(client); nl_mqtt_destroy(client); nl_mqtt_shutdown(); return 0; } ``` ### 多语言错误消息 ```c #include "netleaf_mqtt.h" #include "netleaf_lang.h" #include int main() { nl_mqtt_init(); // 设置中文 nl_lang_set("zh_cn"); nl_mqtt_client_t* client = nl_mqtt_create(); // 尝试连接(故意使用无效地址) int ret = nl_mqtt_connect(client, "tcp://invalid:9999", NULL); if (ret != 0) { // 获取多语言错误消息 const char* msg = nl_lang_get_error(NL_LIB_MQTT, ret); printf("错误: %s (原始码: %d)\n", msg, ret); // 输出: 错误: 连接被拒绝 (原始码: -5) } nl_mqtt_destroy(client); return 0; } ```