原因:由于janus服务端http使用的是libmicrohttpd三方库,所以在此进行记录。
概述:通过引用.lib,实现http服务端的创建,并通过客户端post发送,实现数据的传输。
介绍:
libmicrohttpd:是一个c语言库,主要实现http服务器的功能,主要特点有:体积小,api简单,跨平台,且兼容HTTP1.1。
下载地址:http://www.gnu.org/software/libmicrohttpd/ ,根据不同版本下载,目前最新的win只有vs2017和2019,老版本有2015。
以0.9.58为例进行服务器创建和客户端创建代码如下:
通过MHD_start_daemon方法实现http服务器的创建,当有http请求时则会触发connetionhandle方法,该方法为一个回调函数.
int main()
{
const int port = 8888;
struct MHD_Daemon *daemon = MHD_start_daemon(MHD_USE_SELECT_INTERNALLY,
port, nullptr, nullptr, connectionhandle, nullptr, MHD_OPTION_END);
}
通过回调方法实现协议解析,获取post的body。
int connectionhandle(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)
{
std::string str(upload_data,*uplpoad_data_size);
return MHD_YES;
}
客户端简单如下:
char buf[1024] = { 0 };
char *pHttpPost = "POST %s HTTP/1.1\r\n"
"Content-Length: %d\r\n\r\n"
"%s";
char strHttpPost[1024] = { 0 };
std::string data = "hello";
std::string url = "/janus";
sprintf(strHttpPost, pHttpPost, url.c_str(),data.length(), data.c_str());
printf("send=%s\n", strHttpPost);
send(client, strHttpPost, strlen(strHttpPost), 0);
总结:以上就是LibmicroHttpd库的简单调用.