/*

    这个示例是一个使用了Dlib C++ 库的server组件的HTTP扩展

    它创建一个始终以简单的HTML表单为响应的服务器。
要查看这个页面,你应该访问 http://localhost:5000 */ #include <iostream>
#include <sstream>
#include <string>
#include <dlib/server.h> using namespace dlib;
using namespace std; class web_server : public server_http
{
const std::string on_request (
const incoming_things& incoming,
outgoing_things& outgoing
)
{
ostringstream sout;
// 我们将发回一个包含HTML表单的页面,其中包含两个文本输入字段。一个字段是name(还有一个是pass)
// HTML表单使用post方法,也可以使用get方法(只需将method='post'改为method='get'). sout <<" <html><meta charset=\"utf-8\"><body> "
<< "<form action='/form_handler' method='post'> "
<< "用户名称: <input name='user' type='text'><br> "
<< "用户密码: <input name='pass' type='text'> <input type='submit'> "
<< " </form>"; // 回写这个请求传入的一些信息,以便它们显示在生成的网页上
sout << "<br> path = " << incoming.path << endl;
sout << "<br> request_type = " << incoming.request_type << endl;
sout << "<br> content_type = " << incoming.content_type << endl;
sout << "<br> protocol = " << incoming.protocol << endl;
sout << "<br> foreign_ip = " << incoming.foreign_ip << endl;
sout << "<br> foreign_port = " << incoming.foreign_port << endl;
sout << "<br> local_ip = " << incoming.local_ip << endl;
sout << "<br> local_port = " << incoming.local_port << endl;
sout << "<br> body = \"" << incoming.body << "\"" << endl; // 如果此请求是用户提交表单的结果,则回显提交
if (incoming.path == "/form_handler")
{
sout << "<h2> 来自 query string 的信息 </h2>" << endl;
sout << "<br> user = " << incoming.queries["user"] << endl;
sout << "<br> pass = " << incoming.queries["pass"] << endl; // 将这些表单提交作为Cookie保存
outgoing.cookies["user"] = incoming.queries["user"];
outgoing.cookies["pass"] = incoming.queries["pass"];
} // 将所有Cookie回传到客户端浏览器
sout << "<h2>客户web浏览器发送给服务器的 Cookies</h2>";
for ( key_value_map::const_iterator ci = incoming.cookies.begin(); ci != incoming.cookies.end(); ++ci )
{
sout << "<br/>" << ci->first << " = " << ci->second << endl;
} sout << "<br/><br/>"; sout << "<h2>客户web浏览器发送给服务器的 HTTP Headers</h2>";
// 回显从客户端web浏览器接收的所有HTTP headers
for ( key_value_map_ci::const_iterator ci = incoming.headers.begin(); ci != incoming.headers.end(); ++ci )
{
sout << "<br/>" << ci->first << ": " << ci->second << endl;
} sout << "</body> </html>"; return sout.str();
} }; int main()
{
try
{
// 创建一个 web server 实例对象
web_server our_web_server; // 监听5000端口
our_web_server.set_listening_port(5000);
// 告诉服务器开始接受连接。
our_web_server.start_async(); cout << "请按Enter(回车)键去结束程序" << endl;
cin.get();
}
catch (exception& e)
{
// 上面出错会抛出异常
// 输出异常消息
cout << e.what() << endl;
}
}

DLib Http Server程序示例的更多相关文章

  1. Android : 跟我学Binder --- (3) C程序示例

    目录: Android : 跟我学Binder --- (1) 什么是Binder IPC?为何要使用Binder机制? Android : 跟我学Binder --- (2) AIDL分析及手动实现 ...

  2. mysql的启动脚本mysql.server及示例配置文件

    以MySQL-server-4.0.14-0.i3862881064151.rpm为例,放在/data目录下 cd /data rpm -ivh MySQL-server-4.0.14-0.i386. ...

  3. 小程序-demo:小程序示例

    ylbtech-小程序-demo:小程序示例     1.返回顶部 0. 1.app.js const openIdUrl = require('./config').openIdUrl App({ ...

  4. 《Unix 网络编程》05:TCP C/S 程序示例

    TCP客户/服务器程序示例 系列文章导航:<Unix 网络编程>笔记 目标 ECHO-Application 结构如下: graph LR; A[标准输入/输出] --fgets--> ...

  5. [计算机网络]简易http server程序

    好久没输出了,知识还是要写下总结才能让思路更加清晰.最近在学习计算机网络相关的知识,来聊聊如何编写一个建议的HTTP服务器. 这个http server的实现源代码我放在了我的github上,有兴趣的 ...

  6. 【转】推荐介绍几款小巧的Web Server程序

    原博地址:http://blog.csdn.net/heiyeshuwu/article/details/1753900 偶然看到几个小巧有趣的Web Server程序,觉得有必要拿来分享一下,让大家 ...

  7. Arduino 入门程序示例之一个 LED(2015-06-11)

    前言 答应了群主写一些示例程序,一直拖延拖延拖延唉.主要还是害怕在各大高手面前班门弄斧……(这也算是给拖延症找一个美好的理由吧),这几天终于下决心要写出来了,各位高手拍砖敬请轻拍啊. 示例程序 首先是 ...

  8. WinDBG调试.NET程序示例

    WinDBG调试.NET程序示例 好不容易把环境打好了,一定要试试牛刀.我创建了一个极其简单的程序(如下).让我们期待会有好的结果吧,阿门! using System; using System.Co ...

  9. [图形学] Chp10 OpenGL三维观察程序示例

    10.10节书中给出了一个程序示例,有一个填充正方形,从侧面的角度观察并画到屏幕上. 图0 这里进一步画出一个立方体,将相机放入立方体中心,旋转相机,达到在立方体中旋转看到不同画面的效果. 步骤: 1 ...

随机推荐

  1. QT入门系列(3):控制台输出QString

    方式一:使用qDebug()输出 QString str("liyifeng");qDebug() << str;12输出结果:"liyifeng" ...

  2. json schema校验

    工作中使用到了json schema格式校验的问题,在网上查了些资料,结合自己的理解记录一下. json schema可以对json结果字符串做出一些约束,例如: 1. 值类型是:array, obj ...

  3. Android教材 | 第三章 Android界面事件处理(一)—— 杰瑞教育原创教材试读

      前  言 JRedu Android应用开发中,除了界面编程外,另一个重要的内容就是组件的事件处理.在Android系统中,存在多种界面事件,比如触摸事件.按键事件.点击事件等.在用户交互过程中, ...

  4. android api doc 一

    Manifest.permission 用于记录相应权限类 ACCESS_CHECKIN_PROPERTIES 允许在登入数据库的时候读写其中的属性表,并上传改变的值 ACCESS_COARSE_LO ...

  5. Oracle中rownum用法警示

    今天调试代码,发现分页查询时使用Oracle中rownum的between......and用法的bug,特此总结: 参考资料:http://blog.csdn.net/lg312200538/art ...

  6. InvalidateRect,invalidate,updatewindow(转)

    InvalidateRect(HWND) 使窗口无效 产生消息WM_PAINT; ValidateRect(HWND)使窗口有效 清除消息队列中的WM_PAINT消息 在编程的时候经常把UpdateD ...

  7. 【转】npm install、npm install --save与npm install --save-dev区别

    原文: https://blog.csdn.net/qq_30378229/article/details/78463930 ------------------------------------- ...

  8. Kafka:ZK+Kafka+Spark Streaming集群环境搭建(二十六)Structured Streaming:WARN clients.NetworkClient: Error while fetching metadata with correlation id 1 : {my-topic=LEADER_NOT_AVAILABLE}

    问题描述: 我之前使用kafka的命令删除了改topic: ./kafka-topics.sh --delete --zookeeper [zookeeper server]  --topic [to ...

  9. mac sierra 10.12部分注册机Special-K+CORE Keygen不能运行的问题

    自从mac升级到了sierra之后,很多注册机都打不开了,于是,我想尽了很多办法之后,终于搞定. 1.国外的大神,开发了一个软件,可以修复你的破解补丁,操作方法如下: 下载软件 http://bbs. ...

  10. oauth2-server-php-docs 存储

    PDO 概观 PDO存储类使用 PHP 的PDO扩展.这允许连接到MySQL,SQLite,PostgreSQL 等等. 安装 PDO是默认安装的php 5.1+,这个库已经是必需的了,所以你会很好的 ...