0

0

深入探讨tiny服务器

巴扎黑

巴扎黑

发布时间:2017-07-21 16:47:27

|

2100人浏览过

|

来源于php中文网

原创

  最近学习到了《深入理解计算机系统》的第11章网络编程,在最后一节是一个名为tiny的小型web服务器的实现,源代码书中已经给出,这里就不再复制粘贴了。这篇小博客主要记录一下课后题10的解答。原题目为:
     写出cgi adder函数的html表单。你的表单应该包括两个文本框,用户将需要相加的两个数字填在这两个文本框中。你的表单应该使用get方法请求内容。
     因为我以前没接触过html表单,先百度之,找到了w3school的html教材,看了一下表单的部分,写出了一个很简单的小表单,命名为index.html:

 1  2  3  4  5 

6 please enter two numbers:
7

8 9
10 The first number:11
12 The second number:13
14 15
16 17 18

  这是输入localhost:8888之后浏览器显示的效果图。8888是我设置的tiny的端口,至于为什么没有后边的/index.html,是因为我在源代码中将index.html设为了主界面。

  我们可以随便输入两个数字,点击Submit按钮,结果肯定是不对的。。

佳可商务购物程序 2004
佳可商务购物程序 2004

在原版的基础上做了一下修正评论没有提交正文的问题特价商品的调用连接问题去掉了一个后门补了SQL注入补了一个过滤漏洞浮动价不能删除的问题不能够搜索问题收藏时放入购物车时出错点放入购物车弹出2个窗口修正主题添加问题商家注册页导航连接问题销售排行不能显示更多问题热点商品不能显示更多问题增加了服务器探测 增加了空间使用查看 增加了在线文件编辑增加了后台管理里两处全选功能更新说明:后台的部分功能已经改过前台

下载

  如上图所示,结果显示的是0。注意在该网页的地址栏处,我们看到"localhost:8888/cgi-bin/adder?num1=22&num2=22",看过tiny源码我们就会知道,adder.c所要分析的数据是在&符号两边的纯数字,也就是说,要想正确的被adder.c程序求和,地址栏应该显示"localhost:8888/cgi-bin/adder?22&22"才对。出现上图中的错误的原因就是,adder程序没有取得两个参数的数值大小。解决方法很简单,只需要在adder.c程序里把两个数字取出来就行了,整个adder.c代码如下所示:

 1 #include "net.h" 2  3 int main(void) 4 { 5     char *buf, *p; 6     char arg1[MAXLINE], arg2[MAXLINE], content[MAXLINE]; 7     char tmp[MAXLINE]; 8     int n1 = 0, n2 = 0; 9 10     if ( (buf = getenv("QUERY_STRING")) != NULL) {11         p = strchr(buf, '&');12         *p = '\0';13 14         strcpy(arg1, buf);15         strcpy(arg2, p+1);16 17         //用来取出两个参数的代码18         p = strchr(arg1, '=');19         strcpy(arg1, p+1);20         p = strchr(arg2, '=');21         strcpy(arg2, p+1);22 23         n1 = atoi(arg1);24         n2 = atoi(arg2);25     }26 27     sprintf(content, "QUERY_STRING = %s", buf);28     sprintf(content, "Welcome to add.com: ");29     //sprintf(content, "arg1=%s, arg2=%s\n", arg1, arg2);  调试输出参数30     sprintf(content, "%sThe Internet addition portal.\r\n

", content);31 sprintf(content, "%sThe answer is: %d + %d = %d\r\n

",32 content, n1, n2, n1 + n2);33 sprintf(content, "%sThanks for visiting!\r\n", content);34 35 //generate the http response36 printf("Connection: close\r\n");37 printf("Content-length: %d\r\n", (int)strlen(content));38 printf("Content-type: text/html\r\n\r\n");39 printf("%s", content);40 fflush(stdout);41 42 exit(0);43 }

  重新编译adder.c之后,我们再次在浏览器输入网址:localhost:8888,输入两个数字,结果如图:

  至此,我们学习Tiny的第一阶段就算完成了,完成了课后题11.10的要求,能够处理来自浏览器的静态请求和动态请求。但是,由于我们的Tiny一次只能处理一个连接,效率太低了。下一节我们就要对Tiny进行一下改进,使其能够支持并发处理。

相关专题

更多
c++主流开发框架汇总
c++主流开发框架汇总

本专题整合了c++开发框架推荐,阅读专题下面的文章了解更多详细内容。

3

2026.01.09

c++框架学习教程汇总
c++框架学习教程汇总

本专题整合了c++框架学习教程汇总,阅读专题下面的文章了解更多详细内容。

7

2026.01.09

学python好用的网站推荐
学python好用的网站推荐

本专题整合了python学习教程汇总,阅读专题下面的文章了解更多详细内容。

11

2026.01.09

学python网站汇总
学python网站汇总

本专题整合了学python网站汇总,阅读专题下面的文章了解更多详细内容。

1

2026.01.09

python学习网站
python学习网站

本专题整合了python学习相关推荐汇总,阅读专题下面的文章了解更多详细内容。

4

2026.01.09

俄罗斯手机浏览器地址汇总
俄罗斯手机浏览器地址汇总

汇总俄罗斯Yandex手机浏览器官方网址入口,涵盖国际版与俄语版,适配移动端访问,一键直达搜索、地图、新闻等核心服务。

9

2026.01.09

漫蛙稳定版地址大全
漫蛙稳定版地址大全

漫蛙稳定版地址大全汇总最新可用入口,包含漫蛙manwa漫画防走失官网链接,确保用户随时畅读海量正版漫画资源,建议收藏备用,避免因域名变动无法访问。

14

2026.01.09

php学习网站大全
php学习网站大全

精选多个优质PHP入门学习网站,涵盖教程、实战与文档,适合零基础到进阶开发者,助你高效掌握PHP编程。

2

2026.01.09

php网站搭建教程大全
php网站搭建教程大全

本合集专为零基础用户打造,涵盖PHP网站搭建全流程,从环境配置到实战开发,免费、易懂、系统化,助你快速入门建站!

6

2026.01.09

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
SQL 教程
SQL 教程

共61课时 | 3.4万人学习

麻省理工大佬Python课程
麻省理工大佬Python课程

共34课时 | 5万人学习

【web前端】Node.js快速入门
【web前端】Node.js快速入门

共16课时 | 1.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号