自己动手写http服务器(三) -- 代码实现 - Go语言中文社区

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


系列文章:
自己动手写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服务器的工作流程,写完这个,就差不多能够达到目的了!



作者:FoolishFlyFox
链接:https://www.jianshu.com/p/5da0938a8e54
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

版权声明:本文来源CSDN,感谢博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/zjy900507/article/details/88633491
站方申明:本站部分内容来自社区用户分享,若涉及侵权,请联系站方删除。
  • 发表于 2020-03-01 19:55:29
  • 阅读 ( 1138 )
  • 分类:

0 条评论

请先 登录 后评论

官方社群

GO教程

猜你喜欢