当前位置:   article > 正文

简单的嵌入式web服务器设计_嵌入式网页设计

嵌入式网页设计

实验原理

WEB浏览器

    浏览器是个显示网页伺服器或档案系统内的HTML文件,并让用户与此些文件互动的一种软件。个人电脑上常见的网页浏览器包括Internet Explorer、Firefox、Safari。浏览器是最经常使用到的客户端程序。

WEB服务器

    Web服务器一般指网站服务器,是指驻留于因特网上某种类型计算机的程序,可以向浏览器等Web客户端提供文档,也可以放置网站文件,让全世界浏览;可以放置数据文件,让全世界下载。

    通俗的讲,Web服务传送页面使得浏览器可以浏览,它专门处理HTTP请求。

嵌入式服务器架构

常见的嵌入式WEB服务器有lighttpd、shttpd、thttpd、boa、mathopd、minihttpd、appweb、goahead等上百种

SOCKET编程技术

    Socket接口是TCP/IP网络的API,Socket接口定义了许多函数或例程

    Socket可以支持数据的发送和接收,它会定义一种称为套接字的变量,发送数据时首先创建套接字,然后使用该套接字的sendto等方法对准某个IP/端口进行数据发送;接收端也首先创建套接字,然后将该套接字绑定到一个IP/端口上,所有发向此端口的数据会被该套接字的recv等函数读出。如同读出文件中的数据一样 

HTTP协议

HTTP--Hyper Text Transfer Protocol,超文本传输协议,是一种建立在TCP上的无状态连接,整个基本的工作流程是客户端发送一个HTTP请求,说明客户端想要访问的资源和请求的动作,服务端收到请求之后,服务端开始处理请求,并根据请求做出相应的动作访问服务器资源,最后通过发送HTTP响应把结果返回给客户端。其中一个请求的开始到一个响应的结束称为事务,当一个事物结束后还会在服务端添加一条日志条目

一次完整的HTTP请求需要七个步骤

图片来源:http://android.jobbole.com/85218/

HTTP报文:

它是HTTP应用程序之间发送的数据块。这些数据以一定的文本信息开头,这些信息描述了报文的内容及含义,报头后跟着数据部分

一次http请求,http会从客户端流到服务器,服务器的工作完成后,报文从服务器流到客户端

所有的http报文都可以分为请求报文和响应报文。它们的结构基本相同,只有起始语法些许不同

图片来源:https://www.cnblogs.com/zhuifeng/p/4072248.html

 

请求报文:它会向Web服务器请求一个动作

请求报文的格式:

起始行: <method> <request-URL> <version>

头部:   <headers>

主体:   <entity-body>

 

响应报文:它会将请求的结果返回给客户端。

响应报文的格式:

起始行:  <version> <status> <reason-phrase>

头部:    <headers>

主体:    <entity-body>

  1. 1、方式(method):客户端希望服务器对资源执行的动作,是一个单独的词,比如,GET、POST或HEAD
  2. 2、请求URL(request-URL):要直接与服务器进行对话,只要请求URL是资源的绝对路径就可以了,服务器可以假定自己是URL的主机/端口
  3. 3、版本(version):报文所使用的HTTP版本。其格式:HTTP/<主要版本号>.<次要版本号>
  4. 4、状态码(status-code):状态码是三位数字,描述了请求过程中所发生的情况。每个状态码的第一位数字都用于描述状态的一般类别(比如,“成功”、“出错”等等)
  5. 5、原因短语(reason-phrase):数字状态码的可读版本,包含行终止序列之前的所有文本。原因短语只对人类有意义,因此,尽管响应行HTTP/1.0 200 NOT OK和HTTP/1.0 200 OK中原因短语的含义不同,但同样都会被当作成功指示处理
  6. 6、头部(header):可以有零个或多个头部,每个首部都包含一个名字,后面跟着一个冒号(:),然后是一个可选的空格,接着是一个值,最后是一个CRLF首部是由一个空行(CRLF)结束的,表示了头部列表的结束和实体主体部分的开始
  7. 7、实体的主体部分(entity-body):实体的主体部分包含一个由任意数据组成的数据块,并不是所有的报文都包含实体的主体部分,有时,报文只是以一个CRLF结束。

SOCKET编程接口

1.socket()函数

  1. int socket(int domain,int type,int protocol);
  2. 说明:socket()函数创建一个套接字
  3. 参数:
  4. domain 应用程序所在主机使用的通信协议族
  5. type 建立的套接字类型
  6. protocol 使用的特定协议

2.bind()函数

  1. int bind(int sockfd,struct sockaddr *my_addr,socklen_t addrlen);
  2. 说明:将套接字地址和所创建的套接字id联系起来
  3. 参数:
  4. sockfd socket返回的文件描述符
  5. my_addr 指向结构体sockaddr的指针,保存地址信息(端口、ip)
  6. addrlen sockaddr的长度

3、connect函数

  1. int connect(int sockfd,const struct sockaddr *serv_addr,socklen_t addrlen);
  2. 说明:建立套接字连接,成功返回0,否则返回-1
  3. 参数:
  4. sockfd socket返回的文件描述符
  5. serv_addr 保存着连接信息的结构体sockaddr
  6. addrlen sockaddr的长度

4、listen()函数

  1. int listen(int sockfd,int backlog);
  2. 说明:使得一个进程可以接受其它进程的请求,使其变为服务器进程
  3. 参数:
  4. sockfd socket返回到文件描述符
  5. backlog 允许建立连接的数目

5、accept()函数

  1. int accept(int sockfd,struct sockaddr *addr,socklen_t *addrlen);
  2. 说明:用于流式套接字的通讯,返回实际发送的数据的字节数
  3. 参数:
  4. sockfd socket返回的文件描述符
  5. addr 保存套接字信息的结构体
  6. addrlen addr的长度

6、send()函数

  1. ssize_t send(int sockfd,const void *msg,size_t len,int flags);
  2. 说明:用于流式套接字或数据报套接字的通讯,返回实际发送的数据的字节数
  3. 参数:
  4. sockfd 发送数据的套接字描述符
  5. msg 指向发送数据的指针
  6. len 发送数据的长度
  7. flags 默认为0

7、recv()函数

  1. ssize_t recv(int sockfd,void *buf,size_t len,int flags);
  2. 说明: 用于流式套接字的通讯,返回值为实际读入缓冲的数据的字节数
  3. 参数:
  4. sockfd 要读的套接字描述符
  5. buf 要读的消息的缓冲区
  6. len 缓冲的最大长度
  7. flags 默认为0

Apache服务器的安装

Web服务器一般指网站服务器,是指驻留于Inter网上某种类型的计算机程序,它可以向浏览器客户端提供文档,也可以放置网站文件,让全世界浏览;它可以放置数据文件,让全世界下载。

Apaches世界排名第一的Web服务器软件。它可以运行在所有广泛使用的计算机平台上,由于其跨平台和安全性被广泛使用。

如果你使用的linux系统为Ubuntu,你可以很方便的下载apache

终端输入:apt-get install apache2

只需一个指令,你就能完成apache的安装,如果你想要进行apache的各种配置,请自行搜索

安装之后,apache默认是开启的且每次会随系统启动

终端输入:apachectl -v查看apache的版本

当然,你可以在浏览器输入你服务器的ip地址(安装服务器的linux的ip),如果你得到默认界面,那么一切都是正常的

之后,你就能在/var/www/html/下找到index.html文件,编辑它,你就能得到你想要的界面

效果如下:

该页面为仿写淘宝页面

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/216955?site
推荐阅读
相关标签
  

闽ICP备14008679号