标签:
开源web服务器,Tiny HTTPd,纯c编写,作者: jdavidb。服务器小巧,轻便,结构简单,将搭建web服务器的原理阐述的很清楚,对学习很有帮助。下载地址
测试环境:Ubuntu 14.04.2
由于服务器不是默认为linux开发的,所以需要经过简单的修改才能在linux上运行起来。
1、修改Makefile文件,将gcc -W -Wall -lsocket -lpthread -o httpd httpd.c
修改为:gcc -W -Wall -o httpd httpd.c -lpthread。(删除-lsocket,linux下不需要 -lsocket。将-lphtread放到最后,在网上查找得到的结果是-lphtread不能放在 -o 前面,具体原因目前未知)
其实在源代码httpd.c里面,介绍了在linux系统上编译时,需要修改的地方,(还是要仔细阅读源代码)。
2、htdocs文件夹下,有两个cgi脚本文件,用于此服务器的响应,用perl语言编写,由于机器默认perl安装位置不同,所以需要修改为本机的perl地址。
经过两处修改,make 后, 服务器即可成功搭建起来。
服务器有三种交互方式:
1、直接输入ip:port地址,服务器打开存在htdocs文件夹下的index.html文件,在收入框内输入一种颜色,如red或0 0 0 ,index.html调用color.cgi脚本,显示该颜色。
2、可直接访问htdocs文件夹下脚本,如ip:port/color.cgi,默认为蓝色,或另一个脚本文件index.html/check.cgi。
3、可直接访问htdocs文件夹下文件,如ip:port/README,将打印该文件。
总结:
1、name.sin_port = htons(*port)
此处若*port为0,则系统会随机分配端口号
2、name.sin_addr.s_addr = htonl(INADDR_ANY);
INADDR_ANY:此处表示任意IP地址,若服务器有多块网卡,多个IP地址,通过几个IP地址+端口均可访问服务器
3、newline 即 linefeed: 换行符 LF \n 换到下一行的当前列
carriage return 回车符 CR \r 回到当前行的起始位置
4、strcasecmp忽略大小写比较字符串是否相等,isspace判断字符是否为空字符,为空则返回true
标签:
原文地址:http://my.oschina.net/u/2313065/blog/483912