亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C > 正文

使用Libmicrohttpd搭建內嵌(本地)服務器的方法

2020-01-26 13:57:53
字體:
來源:轉載
供稿:網友

Libmicrohttpd簡介

GNU Libmicrohttpd是一個用來在項目中內嵌http服務器的C語言庫,它具有以下幾個非常鮮明的特點:

C語言庫,小而快。

API非常簡單,且都是可重入的。

兼容HTTP1.1。

支持4種多線程模型(select、poll、pthread、thread poll)。

跨平臺。

生成的二制文件只有32K(不包含TLS/SSL等額外功能)。

搭建一個簡單的本地靜態服務器

這篇文章里,我們只編寫一個簡單的靜態服務器,對于用戶的所有請求我們都只返回同一個html頁面, 該頁面顯示一串字符。

1. 下載Libmicrohttpd,編譯后添加進VS項目

為了使用Libmicrohttpd,我們需要將其添加進VS項目中。這里我們選擇編譯源代碼生成靜態庫,因為官方給的下載靜態庫版本鏈接在使用時會有問題,可能是運行庫版本不一致; 并且在使用靜態庫的情況下,我們只需要引用兩個文件就可以了(一個頭文件、一個庫文件),項目結構不會混亂不清。

實際上Libmicrohttpd的源碼編譯非常簡單,它提供了VS編譯文件,基本上我們只需要進入<>w32目錄,在該目錄下選擇合適的VS子目錄下的sln文件,雙擊打開就可以了。打開后,修改設置libmicrohttpd項目為靜態庫項目(記得修改生成文件的后綴名,因為默認是dll),右擊生成就可以編譯成功了。

生成的文件包括一個頭文件和一個靜態庫文件,新建一個VS控制臺項目,并將它們添加到VS項目中。

2. main函數

main函數非常簡單,核心調用只有2個函數:<>MHD_start_daemon,MHD_stop_daemon,分別開始和停止http服務器。

int main(){  const int port = 8888;  struct MHD_Daemon* daemon =     MHD_start_daemon(MHD_USE_SELECT_INTERNALLY, port    , NULL, NULL, connectionHandler, NULL, MHD_OPTION_END);  if (daemon == NULL) {    std::cout << "cannot start server!/n";    return -1;  }  std::cin.get();  MHD_stop_daemon(daemon);  return 0;}

MHD_start_daemon函數包含非常多的參數,這也意味著它集成了很多的功能,這里我們只關注四個參數,其它都為NULL:

MHD_USE_INTERNAL_POLpNG_THREAD。這個參數與其他兩個參數(MHD_USE_POLL_INTERNAL_THREAD、MHD_USE_EPOLL_INTERNAL_THREAD)一起構成了microhttpd支持的三種模式:select、poll、epoll。用戶必須選擇這三種模式之一。具體信息見源碼。

port。端口號。

connectHandler。處理請求的函數。

MHD_OPTION_END。由于MHD_start_daemon最后一個參數是一個變參,因此MHD_OPTION_END用來表示變參終止。

MHD_stop_daemon函數比較簡單,這里不介紹了。

3 請求處理函數

所有的請求處理都發生在<>connectionHandler中:

int connectionHandler(  void *cls,  struct MHD_Connection *connection,  const char *url,  const char *method,  const char *version,  const char *upload_data,  size_t *upload_data_size,  void **con_cls){  const char* pageBuffer = "<html><body>Hello, I'm lgxZJ!</body></html>";  struct MHD_Response *response;  response = MHD_create_response_from_buffer(strlen(pageBuffer),    (void*)pageBuffer, MHD_RESPMEM_PERSISTENT);  if (MHD_add_response_header(response, "Content-Type", "text/html") == MHD_NO) {    std::cout << "MHD_add_response_header error/n";    return MHD_NO;  }  if (MHD_queue_response(connection, MHD_HTTP_OK, response) == MHD_NO) {    std::cout << "MHD_queue_response error/n";    return MHD_NO;  }  MHD_destroy_response(response);  return MHD_YES;}

這個函數簽名包含了所有用來處理請求的有用信息,這里不逐一介紹了。microhttpd庫提供了函數來方便我們響應請求,這里我們重點看創建響應。microhttpd庫提供了兩種方法來創建請求:從buffer創建、從文件創建。但是后者需要傳入一個文件描述符,這在windows上不是很方便。

我們這里用緩沖創建。需要注意的是最后一個參數,這是一個<>MHD_ResponseMemoryMode枚舉值,表示我們使用的buffer內容是固定不變的。這種枚舉類型還包含其他2種代表瞬時緩沖類型的值,分別表示緩沖區是在heap上的,和非heap(例如stack)上的。 用不同的緩沖區時要記得用不同的枚舉值。 接下來設置MIME類型,把緩沖入隊,并釋放MHD_Response結構體。對于正確響應,我們返回MHD_YES;不能響應的,我們返回MHD_NO。

運行程序,我們打開瀏覽器并輸入<>127.0.0.1:8888,得到如下結果:

pic-result

還能做更多

MHD_start_daemon函數還可以限制特定ip的訪問。

請求處理函數還包含請求方法請求數據

我們還可以掛起、恢復連接

以上這篇使用Libmicrohttpd搭建內嵌(本地)服務器的方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品一区二区av影院萌芽| 91最新在线免费观看| 国产极品jizzhd欧美| 国产精品v片在线观看不卡| 色999日韩欧美国产| 成人免费视频在线观看超级碰| 97精品视频在线观看| 亚洲午夜未删减在线观看| 国内精品视频一区| 亚洲国产欧美一区二区三区同亚洲| 亚洲变态欧美另类捆绑| 国产91在线播放精品91| 日本精品视频在线观看| 7777精品久久久久久| 欧美日韩在线影院| 亚洲成人国产精品| 日韩欧美中文在线| 国产精品自产拍在线观看| 精品偷拍各种wc美女嘘嘘| 日韩精品极品毛片系列视频| 日韩在线免费视频| 亚洲国产精品999| 国产精品福利在线观看| 在线观看精品国产视频| 中国china体内裑精亚洲片| 国产成人精品视频在线观看| 国产精品视频自拍| 中文字幕精品在线| 亚洲精品成人久久电影| xxx成人少妇69| 国产精品毛片a∨一区二区三区|国| 国产精品入口日韩视频大尺度| 欧美午夜精品久久久久久久| 国产91九色视频| 91精品视频播放| 国产亚洲免费的视频看| 亚洲自拍偷拍色图| 国产91在线播放精品91| 精品国产欧美一区二区三区成人| 米奇精品一区二区三区在线观看| 国产精品pans私拍| 欧美国产高跟鞋裸体秀xxxhd| 亚洲精品综合精品自拍| 欧美www在线| 国产视频亚洲精品| 色妞欧美日韩在线| 91社影院在线观看| 91午夜理伦私人影院| 一区二区三区四区在线观看视频| 成人精品久久av网站| 亚洲美女在线视频| 日韩三级成人av网| 亚洲视频999| 久久久av亚洲男天堂| 91香蕉亚洲精品| 亚洲福利视频免费观看| 久久久久久久一区二区| 91av国产在线| 午夜精品一区二区三区在线| 色天天综合狠狠色| 欧美性xxxx极品hd欧美风情| 欧美性视频精品| 国产精品高潮呻吟久久av野狼| 久久视频在线播放| 亚洲性无码av在线| 日韩免费av一区二区| 国产精品白丝jk喷水视频一区| 亚洲在线免费看| 中文字幕日韩视频| 欧美亚洲第一页| 欧美激情一区二区三区在线视频观看| 日本精品免费观看| 欧美成人国产va精品日本一级| 国产精品极品在线| 92国产精品视频| 亚洲精品一区二区三区婷婷月| 日韩女优在线播放| 国产欧美在线播放| 久久免费福利视频| 综合激情国产一区| 亚洲国产精品美女| 国产裸体写真av一区二区| 国产精品第三页| 日韩在线视频播放| 欧美一级电影免费在线观看| 2019中文字幕在线| 亚洲精品资源在线| 国产视频综合在线| 国产精品美女主播| 中文字幕日韩欧美在线| 亚洲精品久久视频| 国产精品无av码在线观看| 91成人精品网站| 亚洲成人性视频| 国产精品永久在线| 在线a欧美视频| 欧美激情a∨在线视频播放| 国产精品91在线观看| 日韩av在线不卡| 亚洲最大福利视频网站| 日韩av中文字幕在线播放| 亚洲高清久久网| 精品视频在线导航| 精品日韩美女的视频高清| 欧美一区二粉嫩精品国产一线天| 啊v视频在线一区二区三区| 久久久久久国产免费| 国产aaa精品| 亚洲欧美制服中文字幕| 国产精品久久久久国产a级| 亚洲国产91色在线| 亚洲精品720p| 理论片在线不卡免费观看| 亚洲电影免费在线观看| 国产精品白嫩初高中害羞小美女| 欧美老女人在线视频| 狠狠躁天天躁日日躁欧美| 日韩av在线一区二区| 国产精品青青在线观看爽香蕉| 国产拍精品一二三| 日韩视频永久免费观看| 一本一本久久a久久精品牛牛影视| 国产精品ⅴa在线观看h| 91中文字幕在线观看| 91丨九色丨国产在线| www.亚洲天堂| 欧美专区在线播放| 欧美另类99xxxxx| 国产精品久久在线观看| 97视频网站入口| 国产精品久久久久久久美男| 91高潮精品免费porn| 亚洲免费视频网站| 亚洲欧美日韩一区在线| 亚洲女在线观看| 91久久在线观看| 欧美一级片在线播放| 欧美午夜激情在线| 日韩亚洲欧美中文在线| 亚洲图片欧美午夜| 亚洲欧美一区二区激情| 欧美激情精品久久久久久黑人| 久久亚洲精品小早川怜子66| 欧美夫妻性生活视频| 亚洲国内高清视频| 91wwwcom在线观看| 久久手机精品视频| 激情av一区二区| 亚洲免费高清视频| 91精品国产91久久久久久久久| 97精品一区二区三区| 国产精品av免费在线观看| 亚洲第一网中文字幕| 日本久久久久久久| 97国产真实伦对白精彩视频8| 一本色道久久综合狠狠躁篇的优点| xvideos国产精品| 欧美日韩国产综合新一区| 欧美激情一区二区三区在线视频观看| 中文字幕一区二区精品| 一区二区欧美在线| 国外成人在线播放| 亚洲毛片在线看| 久久亚洲精品国产亚洲老地址|