• ubuntu http 服务器响应


    代码:

    h文件

    1. #include
    2. #include
    3. #include
    4. #include
    5. #include
    6. #include
    7. #include
    8. #include
    9. #include
    10. #include
    11. #include
    12. #include
    13. #define ETH_NAME "eth0"
    14. #define MYHTTPD_SIGNATURE "MoCarHttpd v0.1"
    15. using namespace std;
    16. class RouteTasks{
    17. public:
    18. RouteTasks();
    19. void init();
    20. private:
    21. static void routeTasks(struct evhttp_request *req, void *arg);
    22. string getIp();
    23. int m_port;
    24. int m_timeout;
    25. };

    cpp文件

    1. #include "platfromcommunication.h"
    2. RouteTasks::RouteTasks()
    3. {
    4. m_port = 7777;
    5. m_timeout = 120;
    6. }
    7. void RouteTasks::init()
    8. {
    9. //初始化event API
    10. event_init();
    11. //创建一个http server
    12. struct evhttp *httpd;
    13. httpd = evhttp_start(getIp().c_str(), m_port);
    14. evhttp_set_timeout(httpd, m_timeout);
    15. //也可以为特定的URI指定callback
    16. evhttp_set_cb(httpd, "/wayLine/start", &RouteTasks::routeTasks, NULL);
    17. //循环处理events
    18. event_dispatch();
    19. evhttp_free(httpd);
    20. }
    21. void RouteTasks::routeTasks(evhttp_request *req, void *arg)
    22. {
    23. char request_data[4096] = {0};
    24. //获取POST方法的数据
    25. size_t post_size = EVBUFFER_LENGTH(req->input_buffer);
    26. char *post_data = (char *) EVBUFFER_DATA(req->input_buffer);
    27. memcpy(request_data, post_data, post_size);
    28. printf("got startRouteTasks connection post_data = [%s], len =%ld\n", post_data, post_size);
    29. //解析获得的数据
    30. string task_code;
    31. string stream;
    32. Json::Value jvalue;
    33. Json::Reader jreader;
    34. jreader.parse(request_data, jvalue);
    35. task_code = jvalue["task_code"].asString();
    36. stream = jvalue["stream"].asString();
    37. cout<<"task_code: "<<task_code<<" stream: "<<stream<<"\n-------------------------"<<endl;
    38. //给前段回复一个响应结果
    39. Json::Value root;
    40. Json::FastWriter fastWriter;
    41. root["code"] = Json::Value("0");
    42. root["msg"] = Json::Value("成功");
    43. cout<<"return post"<<fastWriter.write(root)<<endl;
    44. /* 输出到客户端 */
    45. //HTTP header
    46. evhttp_add_header(req->output_headers, "Server", MYHTTPD_SIGNATURE);
    47. evhttp_add_header(req->output_headers, "Content-Type", "application/json; charset=UTF-8");
    48. evhttp_add_header(req->output_headers, "Connection", "close");
    49. //输出的内容
    50. struct evbuffer *buf;
    51. buf = evbuffer_new();
    52. evbuffer_add_printf(buf, "%s", fastWriter.write(root).c_str());
    53. //将封装好的evbuffer 发送给客户端
    54. evhttp_send_reply(req, HTTP_OK, "OK", buf);
    55. evbuffer_free(buf);
    56. }
    57. string RouteTasks::getIp()
    58. {
    59. struct sockaddr_in sin;
    60. struct ifreq ifr;
    61. int sockfd = socket(AF_INET, SOCK_DGRAM, 0);
    62. if(sockfd == -1) {
    63. perror("socket error");
    64. return "";
    65. }
    66. strncpy(ifr.ifr_name, ETH_NAME, IFNAMSIZ);
    67. if(ioctl(sockfd, SIOCGIFADDR, &ifr) == 0) {
    68. memcpy(&sin, &ifr.ifr_addr, sizeof (ifr.ifr_addr));
    69. cout<<ETH_NAME<<" ip : "<<inet_ntoa(sin.sin_addr)<<endl;
    70. return inet_ntoa(sin.sin_addr);
    71. }
    72. return "";
    73. }

     main文件

    1. #include
    2. #include
    3. #include
    4. #include
    5. #include
    6. #include "...h"
    7. using namespace std;
    8. //当向进程发出SIGTERM/SIGHUP/SIGINT/SIGQUIT的时候,终止event的事件侦听循环
    9. void signal_handler(int sig) {
    10. switch (sig) {
    11. case SIGTERM:
    12. case SIGHUP:
    13. case SIGQUIT:
    14. case SIGINT:
    15. event_loopbreak(); //终止侦听event_dispatch()的事件侦听循环,执行之后的代码
    16. break;
    17. }
    18. }
    19. int main()
    20. {
    21. cout << "Hello World!" << endl;
    22. signal(SIGHUP, signal_handler);
    23. signal(SIGTERM, signal_handler);
    24. signal(SIGINT, signal_handler);
    25. signal(SIGQUIT, signal_handler);
    26. RouteTasks rt;
    27. rt.init();
    28. while (1) {
    29. sleep(1);
    30. }
    31. return 0;
    32. }

    http post与get请求:c++ curl post和get请求返回数据解析_c++解析curl返回的json_小鱼仙官的博客-CSDN博客

  • 相关阅读:
    如何优雅的使用 IDEA Debug 进行调试
    PHP+茶叶商城系统 毕业设计-附源码211121
    气膜球幕影院:科技创新的结晶—轻空间
    web开发技术
    理解MySQL的会话变量、局部变量和全局变量
    郑州大学编译原理实验三算符优先分析算法JAVA
    【数据结构】排序之插入排序和选择排序
    第一百三十六回 WillPopScope组件
    CentOS7.x离线安装Docker
    (欧拉)openEuler系统添加网卡文件配置流程、(欧拉)openEuler系统手动配置ipv6地址流程、(欧拉)openEuler系统网络管理说明
  • 原文地址:https://blog.csdn.net/yuchunhai321/article/details/133266929