首页
最新活动
服务器租用
香港服务器租用
台湾服务器租用
美国服务器租用
日本服务器租用
新加坡服务器租用
高防服务器
香港高防服务器
台湾高防服务器
美国高防服务器
裸金属
香港裸金属服务器
台湾裸金属服务器
美国裸金属服务器
日本裸金属服务器
新加坡裸金属服务器
云服务器
香港云服务器
台湾云服务器
美国云服务器
日本云服务器
CDN
CDN节点
CDN带宽
CDN防御
CDN定制
行业新闻
官方公告
香港服务器资讯
帮助文档
wp博客
zb博客
服务器资讯
联系我们
关于我们
机房介绍
机房托管
登入
注册
帮助文档
专业提供香港服务器、香港云服务器、香港高防服务器租用、香港云主机、台湾服务器、美国服务器、美国云服务器vps租用、韩国高防服务器租用、新加坡服务器、日本服务器租用 一站式全球网络解决方案提供商!专业运营维护IDC数据中心,提供高质量的服务器托管,服务器机房租用,服务器机柜租用,IDC机房机柜租用等服务,稳定、安全、高性能的云端计算服务,实时满足您的多样性业务需求。 香港大带宽稳定可靠,高级工程师提供基于服务器硬件、操作系统、网络、应用环境、安全的免费技术支持。
联系客服
服务器资讯
/
香港服务器租用
/
香港VPS租用
/
香港云服务器
/
美国服务器租用
/
台湾服务器租用
/
日本服务器租用
/
官方公告
/
帮助文档
Mongoose --嵌入式 Web 服务器库笔记
发布时间:2024-03-06 16:33:10 分类:帮助文档
Mongoose --嵌入式 Web 服务器库笔记 一、Mongoose 的介绍 Mongoose 是一款嵌入式 Web 服务器库,具有跨平台、轻量级、支持多种网络协议、稳定可靠等特点。 国内下载地址: https://gitee.com/mirrors/mongoose.git 官方链接: https://mongoose.ws/ 参考说明文档: https://mongoose.ws/documentation/ 二、移植 Linux下移植非常简单,只需要将mongoose.c和mongoo.h文件复制到工程中即可。 三、测试 根据手册进行简单测试,手册如下: 测试代码如下: // Copyright (c) 2020 Cesanta Software Limited // All rights reserved #include
#include "mongoose.h" static int s_debug_level = MG_LL_INFO; static const char *s_root_dir = "."; static const char *s_listening_address = "http://0.0.0.0:8000"; static const char *s_enable_hexdump = "no"; static const char *s_ssi_pattern = "#.html"; // Handle interrupts, like Ctrl-C static int s_signo; static void signal_handler(int signo) { s_signo = signo; } // Event handler for the listening connection. // Simply serve static files from `s_root_dir` static void cb(struct mg_connection *c, int ev, void *ev_data, void *fn_data) { if (ev == MG_EV_HTTP_MSG) { struct mg_http_message *hm = (struct mg_http_message *) ev_data; if (mg_http_match_uri(hm, "/api/hello")) { // On /api/hello requests, mg_http_reply(c, 200, "", "{%m:%d}\n", MG_ESC("status"), 1); // Send dynamic JSON response } else { // For all other URIs, struct mg_http_serve_opts opts = {.root_dir = "."}; // Serve files mg_http_serve_dir(c, hm, &opts); // From root_dir } } } static void usage(const char *prog) { fprintf(stderr, "Mongoose v.%s\n" "Usage: %s OPTIONS\n" " -H yes|no - enable traffic hexdump, default: '%s'\n" " -S PAT - SSI filename pattern, default: '%s'\n" " -d DIR - directory to serve, default: '%s'\n" " -l ADDR - listening address, default: '%s'\n" " -v LEVEL - debug level, from 0 to 4, default: %d\n", MG_VERSION, prog, s_enable_hexdump, s_ssi_pattern, s_root_dir, s_listening_address, s_debug_level); exit(EXIT_FAILURE); } int main(int argc, char *argv[]) { char path[MG_PATH_MAX] = "."; struct mg_mgr mgr; struct mg_connection *c; int i; // Parse command-line flags for (i = 1; i < argc; i++) { if (strcmp(argv[i], "-d") == 0) { s_root_dir = argv[++i]; } else if (strcmp(argv[i], "-H") == 0) { s_enable_hexdump = argv[++i]; } else if (strcmp(argv[i], "-S") == 0) { s_ssi_pattern = argv[++i]; } else if (strcmp(argv[i], "-l") == 0) { s_listening_address = argv[++i]; } else if (strcmp(argv[i], "-v") == 0) { s_debug_level = atoi(argv[++i]); } else { usage(argv[0]); } } // Root directory must not contain double dots. Make it absolute // Do the conversion only if the root dir spec does not contain overrides if (strchr(s_root_dir, ',') == NULL) { realpath(s_root_dir, path); s_root_dir = path; } // Initialise stuff signal(SIGINT, signal_handler); signal(SIGTERM, signal_handler); mg_log_set(MG_LL_DEBUG);//mg_log_set(s_debug_level); mg_mgr_init(&mgr); if ((c = mg_http_listen(&mgr, s_listening_address, cb, &mgr)) == NULL) { MG_ERROR(("Cannot listen on %s. Use http://ADDR:PORT or :PORT", s_listening_address)); exit(EXIT_FAILURE); } if (mg_casecmp(s_enable_hexdump, "yes") == 0) c->is_hexdumping = 1; // Start infinite event loop MG_INFO(("Mongoose version : v%s", MG_VERSION)); MG_INFO(("Listening on : %s", s_listening_address)); MG_INFO(("Web root : [%s]", s_root_dir)); while (s_signo == 0) mg_mgr_poll(&mgr, 1000); mg_mgr_free(&mgr); MG_INFO(("Exiting on signal %d", s_signo)); return 0; } 在vs code中打开终端,输入如下指令 可以看到程序自动运行。 打开浏览器输入ip地址和端口,可看到如下: 输入测试指令,可获取到返回信息 http://192.168.1.195:8000/api/hello 简单介绍下相关的函数和结构体,如下: 简单示例,post和get方法: static void cb(struct mg_connection *c, int ev, void *ev_data, void *fn_data) { struct mg_http_message *hm = ev_data; if (ev == MG_EV_HTTP_MSG) { if (strstr(hm->method.ptr, "POST")) { if (mg_http_match_uri(hm, "/haha")) { printf("这是POST请求\n"); printf("body:%s\n",hm->body); mg_http_reply(c, 200, "Content-Type: application/json\r\n", "{%.*s:%.*s}", (strlen("已经收到client请求")),"已经收到client请求", hm->message.len,hm->message); } else { mg_http_reply(c, 500, NULL, "{%.*s:%.*s}", (strlen("已经收到client请求")),"已经收到client请求",hm->message.len, hm->message); } } else if (strstr(hm->method.ptr, "GET")) { if (mg_http_match_uri(hm, "/haha")) { printf("这是GET请求\n"); mg_http_reply(c, 200, "Content-Type: application/json\r\n", "{%.*s:%.*s}", (strlen("已经收到client请求")),"已经收到client请求", hm->message.len,hm->message); } else { mg_http_reply(c, 500, NULL, "{%.*s:%.*s}", (strlen("已经收到client请求")),"已经收到client请求", hm->message.len,hm->message); } } else { mg_http_reply(c, 500, NULL, "{%.*s:%.s}", (strlen("已经收到client请求")),"已经收到client请求",hm->message.len,hm->message); } } (void) fn_data; } 欢迎关注公众号:嵌入式学习与实践
上一篇
公司网站租用服务器多少钱
下一篇
辽阳地区服务器租用多少钱
相关文章
服务器故障与管理口与raid
弹性云服务器怎么使用方法
挂机宝无法登陆怎么办
Windows与wsl互传文件
1t的硬盘怎么插上变成30g
卫星时钟服务器、NTP时钟服务器、GPS北斗网络时钟系统
本地搭建微信小程序或者公众号开发服务器的简单方法
腾讯云轻量级服务器导出镜像并下载到本地
幻兽帕鲁Palworld游戏搭建用什么服务器?附幻兽帕鲁Palworld服务器搭建教程
香港云服务器租用推荐
服务器租用资讯
·广东云服务有限公司怎么样
·广东云服务器怎么样
·广东锐讯网络有限公司怎么样
·广东佛山的蜗牛怎么那么大
·广东单位电话主机号怎么填写
·管家婆 花生壳怎么用
·官网域名过期要怎么办
·官网邮箱一般怎么命名
·官网网站被篡改怎么办
服务器租用推荐
·美国服务器租用
·台湾服务器租用
·香港云服务器租用
·香港裸金属服务器
·香港高防服务器租用
·香港服务器租用特价
7*24H在线售后
高可用资源,安全稳定
1v1专属客服对接
无忧退款试用保障
德讯电讯股份有限公司
电话:00886-982-263-666
台湾总部:台北市中山区建国北路一段29号3楼
香港分公司:九龙弥敦道625号雅兰商业二期906室
服务器租用
香港服务器
日本服务器
台湾服务器
美国服务器
高防服务器购买
香港高防服务器出租
台湾高防服务器租赁
美国高防服务器DDos
云服务器
香港云服务器
台湾云服务器
美国云服务器
日本云服务器
行业新闻
香港服务器租用
服务器资讯
香港云服务器
台湾服务器租用
zblog博客
香港VPS
关于我们
机房介绍
联系我们
Copyright © 1997-2024 www.hkstack.com All rights reserved.