美文网首页网络编程魔法HTTPC语言&嵌入式
自己动手写http服务器(三) -- 代码实现

自己动手写http服务器(三) -- 代码实现

作者: FoolishFlyFox | 来源:发表于2017-07-23 23:45 被阅读229次

    系列文章:
    自己动手写http服务器(一) -- UNIX C 网络编程
    自己动手写http服务器(二) -- http协议分析
    自己动手写http服务器(三) -- 代码实现

    有了前两篇的描述,我们就能实现一个简单的web服务器了。

    效果

    先来介绍一下最终的效果:

    我们通过编译生成两个可执行文件: fhttpdlogin.cgi,其中,fhttpd 是我们的web服务器软件,而 login.cgi 是用C语言编写的可执行文件,用于动态生成web页面;

    开启服务器并访问的过程如下:

    1、启动服务器

    通过命令 ./fhttpd 端口号 指定在本机开启的web服务端口,并启动服务,如:

    启动web服务

    我们就开启了web服务,开启的端口为 8888

    服务器访问

    在浏览器中输入 :localhost:8888 就可访问启动的服务器:

    访问Web服务

    登陆

    通过输入用户名和密码,服务器会校验用户是否存在,分为3种情况:

    1、用户名不存在

    例如,输入用户名:foolish ,密码:abc,web服务器发现找不到该用户名,则显示如下:

    用户不存在

    2、密码不正确

    例如,输入用户名:admin ,密码:abc,显示如下:

    密码错误

    3、成功登录

    例如:输入用户名:admin ,密码:123456,显示如下:

    成功登录

    源码

    源码可以下载zip包,地址为:
    https://github.com/foolishflyfox/fhttpd/archive/master.zip

    有git的同学也可以通过git下载,使用命令:

    git clone https://github.com/foolishflyfox/fhttpd.git
    

    git clone git@github.com:foolishflyfox/fhttpd.git
    

    均可下载;

    在这里就不贴代码凑字数了,需要的自己下 _

    说明

    这里说一下代码中的几个文件的用途:

    • fhttpd.c : 服务器源码
    • login.c:编译出 login.cgi 的源文件
    • index.html : 只在浏览器中输入 IP:端口号 将反馈该html文件;

    其他的几个很好理解,不再赘述;

    要编译出 fhttplogin.cgi ,只须执行 make 命令即可;

    代码中的所有变量都用小驼峰命名法,结构体类型用大驼峰命名法,枚举类型及宏定义名全部大写;

    由于代码中使用了一些 Unix/Linux 系统函数的库,所以,windows下不一定能编译通过,可以在windows下安装Cygwin 或者 在Windows的内置Linux子系统下进行编译运行;

    涉及内容

    虽然主要的源文件 fhttp.c 只有400行只有,但是内容并不少,主要包括:

    • 网络编程(TCP)
    • 多线程
    • 多进程
    • 管道通讯(IPC,进程间通讯的一种方式)
    • 数据的重定向
    • 基础C编程

    应用

    这样小又简单的Web服务器,对于大型的Web服务当然不能支持。但是,在某些嵌入式中,由于受制于硬件限制,也许用得到,比如,很多的路由器中,还是使用cgi提供web服务来对路由器进行配置。

    建议

    可以在理解的大概的思路以后,自己从零开始写一遍,而不是照抄一遍,在遇到问题时再参考代码,这样能够理解得更加深刻。

    存在的问题

    为了代码的简单起见,我们只是用了http协议字段中的很少很少一部分的内容,而且提供的是响应后立马断开连接的Http/1.0服务,所以,有时候会出现web页面刷新不出来情况。

    如果想要大概了解一下Web服务器的工作流程,写完这个,就差不多能够达到目的了!

    相关文章

      网友评论

        本文标题:自己动手写http服务器(三) -- 代码实现

        本文链接:https://www.haomeiwen.com/subject/vmqvkxtx.html