Mongoose 是一个面向 C/C++ 的网络库。它实现了事件驱动 TCP、UDP、HTTP、WebSocket、MQTT 的非阻塞 API。Mongoose让嵌入式网络编程变得快速, 坚固且轻松。
static void ev_handler(struct mg_connection *nc, int ev, void *p) {
if (ev == MG_EV_HTTP_CHUNK)
{
mg_send_response_line(nc, 200, "Access-Control-Allow-Origin: *\r\nAccess-Control-Allow-Methods:*\r\nAccess-Control-Allow-Headers:*\r\n");
}
if (ev == MG_EV_HTTP_REQUEST)
{
char addr[32];
struct http_message *hm = (struct http_message *)p;
mg_sock_addr_to_str(&nc->sa, addr, sizeof(addr), MG_SOCK_STRINGIFY_IP | MG_SOCK_STRINGIFY_PORT);
MLOG << "from " << addr << ":" << QByteArray(hm->method.p, hm->method.len).data() << QByteArray(hm->uri.p, hm->uri.len).data();
QByteArray alldata = "11";
//Content-Type: application/json\r\n
//mg_printf(nc, "%s", "HTTP/1.1 200 OK\r\nTransfer-Encoding: chunked\r\nAccess-Control-Allow-Origin: *\r\n\Access-Control-Allow-Headers: Content-Type\r\n");
//mg_send_response_line(nc, 200, "Access-Control-Allow-Origin: *\r\nAccess-Control-Allow-Methods:GET, POST, OPTIONS\r\nAccess-Control-Allow-Headers:*\r\n");
//mg_send_http_chunk(nc, alldata.constData(), alldata.length());
//mg_send_http_chunk(nc, "", 0);
mg_send(nc, alldata.constData(), alldata.length());
nc->flags |= MG_F_SEND_AND_CLOSE;
}
}
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
QTextCodec *codec = QTextCodec::codecForName("GBK");
#if QT_VERSION < 0x050000
QTextCodec::setCodecForTr(codec);
QTextCodec::setCodecForCStrings(codec);
#endif
QTextCodec::setCodecForLocale(codec);
qDebug() << "+++++++++++++" << "verion " << APPVERSION << "+++++++++++++";
struct mg_mgr mgr;
struct mg_connection *nc;
mg_mgr_init(&mgr, NULL);
//printf("Starting web server on port %s\n", s_http_port);
nc = mg_bind(&mgr, s_http_port, ev_handler);
if (nc == NULL) {
printf("Failed to create listener\n");
exit(0);
}
// Set up HTTP server parameters
mg_set_protocol_http_websocket(nc);
s_http_server_opts.document_root = "."; // Serve current directory
s_http_server_opts.enable_directory_listing = "yes";
for (;;) {
mg_mgr_poll(&mgr, 1000);
}
mg_mgr_free(&mgr);
return a.exec();
}
重点是
