C 语言实现一个简单的语言实现一个简单的 web 服务器的原理解析服务器的原理解析
说到 web 服务器想必大多数人首先想到的协议是 http,那么 http 之下则是 tcp,本篇文章将通过 tcp 来实现一个简单的 web
服务器。
本篇文章将着重讲解如何实现,对于 http 与 tcp 的概念本篇将不过多讲解。
一、了解一、了解 Socket 及及 web 服务工作原理服务工作原理
既然是基于 tcp 实现 web 服务器,很多学习 C 语言的小伙伴可能会很快的想到套接字 socket。socket 是一个较为抽象的通信
进程,或者说是主机与主机进行信息交互的一种抽象。socket 可以将数据流送入网络中,也可以接收数据流。
socket 的信息交互与本地文件信息的读取从表面特征上看类似,但其中所存在的编写复杂度是本地 IO 不能比拟的,但却有相
似点。在 win 下 socket 的交互交互步骤为:WSAStartup 进行初始化–> socket 创建套接字–> bind 绑定–> listen 监听–>
connect 连接–> accept 接收请求–> send/recv 发送或接收数据–> closesocket 关闭 socket–> WSACleanup 最终关闭。
了解完了一个 socket 的基本步骤后我们了解一下一个基本 web 请求的用户常规操作,操作分为:打开浏览器–>输入资源地址
ip 地址–>得到资源。当目标服务器接收到该操作产生掉请求后,我们可以把服务器的响应流程步骤看为:获得 request 请求–
>得到请求关键数据–>获取关键数据–>发送关键数据。服务器的这一步流程是在启动socket 进行监听后才能响应。通过监听得
知接收到请求,使用 recv 接收请求数据,从而根据该参数得到进行资源获取,最后通过 send 将数据进行返回。
二、创建二、创建sokect完成监听完成监听
2.1 WSAStartup初始化初始化
首先在c语言头文件中引入依赖 WinSock2.h:
#include <WinSock2.h>
在第一点中对 socket 的创建步骤已有说明,首先需要完成 socket 的初始化操作,使用函数 WSAStartup,该函数的原型为:
int WSAStartup(
WORD wVersionRequired,
LPWSADATA lpWSAData
);