![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
tinyhttpd
_Madrid
华而无实
展开
-
tinyhttpd — 0 — main
原来一直都在做单片机,大三上学期刚准备做互联网,所以开始学C++,数据结构。一直都在学最基础的东西,没有用过框架,也基本没有熟悉那么多API,所以想通过接触一个小的开源程序学习,目的很多,想学习web sever的工作原理,因为将来肯定会做相关的业务,不了解一个本质不利于深入。 要做一个http sever肯定要了解一下基础的知识,必须要清楚的就是浏览器输入一个url后是怎么和服务器...原创 2018-07-04 22:23:01 · 171 阅读 · 0 评论 -
tinyhttpd—1—startup
上一篇分析了main函数的流程,startup也出现在其中,也说了startup的作用。这篇分析startup的源码。int startup(u_short *port){ int httpd = 0; struct sockaddr_in name; //申请一个socket httpd = socket(PF_INET, SOCK_STREAM, 0); if (http...原创 2018-07-06 11:40:08 · 244 阅读 · 0 评论 -
tinyhttpd—2—getline
这一篇分析一下getline,为后面的accept_request做铺垫。int get_line(int sock, char *buf, int size){ int i = 0; char c = '\0'; int n; while ((i < size - 1) && (c != '\n')) { n = recv(sock, &c...原创 2018-07-06 13:04:30 · 170 阅读 · 0 评论 -
tinyhttpd—3—not_found,unimplimented,bad_request,cannot_execute,headers
这一篇看似介绍的函数很多,其实这些函数都有一个特点,就是他们只是很简单的响应报文,无非就是把符合http协议的字符串写到缓存发送给客户端了。至于每一个报文的具体意思就不解释了,知道他们代表的大概意思能帮助我们去理解http sever的原理就够了。void bad_request(int client){ char buf[1024]; sprintf(buf, "HTTP/1.0...原创 2018-07-06 17:23:57 · 196 阅读 · 0 评论 -
tinyhttpd—4—cat,serve_file
这一篇当中的两个函数也都是代码量很小,功能很简单的函数。void cat(int client, FILE *resource){ char buf[1024]; fgets(buf, sizeof(buf), resource); while (!feof(resource)) { send(client, buf, strlen(buf), 0); fgets(bu...原创 2018-07-07 00:31:17 · 202 阅读 · 0 评论