点赞+关注,功德无量。更多配套资料,欢迎私信。
百度网盘 请输入提取码百度网盘为您提供文件的网络备份、同步和分享服务。空间大、速度快、安全稳固,支持教育网加速,支持手机端。注册使用百度网盘即可享受免费存储空间https://pan.baidu.com/s/1F6BR6uTANKKcNnoaCUAZYA?pwd=1688
上午:WebServer编程
下午:BOA介绍及其移植
教学内容:
1、WebServer编程:
利用IE链接服务器的时候,会发送一个报文,报文格式如下:
其中GET是握手,index.html是打开文件名 HTTP/1.1是协议名
对于网络webserver,主要是利用,在linux虚拟机下,
创建一个TCP主机服务器;
1)、当有客户端(IE)链接的时候,服务器响应。
2)、主程序在链接成功后,在创建线程或者进程去处理链接的队列,同时服务器返回到accept状态继续下一个链接。(如果创建的是线程,必须使用线程函数)
3)、线程或进程中的处理函数,主要解决通过接收的头文,解出文件名,如果不存在,发送不存在的头文;存在就发送成功的头文同时read文件内容,通过套接字发送过去(发送给IE)
---------------------------
成功头文:
------------
--------------------------
---------------------------
失败头文:
------------
--------------------------
2、BOA 服务器
是一个小巧高效的web服务器,是一个运行于unix或linux下的,支持CGI的、适合于嵌入式系统的单任务的http服务器,源代码开放、性能高。 Boa 是一种非常小巧的Web服务器,其可执行代码只有大约60KB左右。作为一种单任务Web服务器,Boa只能依次完成用户的请求,而不会fork出新的进程来处理并发连接请求。但Boa支持CGI,能够为CGI程序fork出一个进程来执行。Boa的设计目标是速度和安全。
3、boa服务器在虚拟机的移植
一> 编译boa 程序
1. www.boa.org 下载boa-0.94.13-src.tar.gz
2. tar zxvf boa-0.94.13-src.tar.gz 解压
3. cd boa-0.94.13-src
4. cd ./src
5. ./configure
6. make
二> 修改配置文件boa.conf
0. 编译完成之后cd .. 返回boa-0.94.13-src 目录
1. 建立/etc/boa 目录, 并复制boa.conf 到/etc/boa 目录下
mkdir /etc/boa
cp boa.conf /etc/boa
2. 进入/etc/boa 目录打开并修改其中的boa.conf 文件
cd /etc/boa
vi boa.conf
以下操作均对/etc/boa 下的boa.conf 进行
3. 修改User nobody 为User 0 ; 修改Group nogroup 为Group 0
4. 修改ErrorLog 选项和AccessLog 选项为:
ErrorLog /var/log/boa/error_log
AccessLog /var/log/boa/access_log
5. 设置html 文件目录: DocumentRoot /var/www
6. 设置默认首页: DirectoryIndex index.html
7. 设置ScriptAlias 选项为:
ScriptAlias /cgi-bin/ /var/www/cgi-bin/
三> 根据第二步设置建立相关文件夹并放入文件:
1. 根据(第二.4 步)的设置建立/var/log/boa 文件夹和相应文件:
mkdir /var/log/boa
touch /var/log/boa/access_log
touch /var/log/boa/error_log
2. 根据(第二.5 步)的设置建立/var/www 文件夹(如果存在此文件则不用创建), 并在
此目录下存放html 文件(包括index.html 文件)。
3. 根据(第二.7 步)的设置建立/var/www/cgi-bin 文件夹
四> OK,在编写boa-0.94.13-src/src 文件夹下运行./boa 程序,启动boa 服务器。
在windows 下通过http://192.168.222.66(此IP 为虚拟机的IP 地址)这种形式
访问,进行测试。
4、boa移植在开发板上
1>. (第一.3 步)操作完成之后,修改Makefile 文件:
将:
CC = gcc
CPP = gcc -E
该为:
CC = arm-linux-gcc
CPP = arm-linux-gcc -E
make 即可。
2>. 拷贝PC 上/etc/mime.types 文件到开发板/etc 目录下
或者将boa.conf 文件中
MimeTypes /etc/mime.types
修改为:
MimeTypes /dev/null
boa 配置相关目录:
1. boa.conf 的存放目录:
默认boa.conf 是在/etc/boa.conf 目录的, boa 运行时会自动去找
/etc/bon.conf 目录。
这个设定是在define.h 文件中定义的,可在编译之前进行修改。
2. log 目录: 分为Errorlog 和AccessLog 两个目录,可在boa.conf 中修改。
如:
ErrorLog /var/log/boa/error_log
AccessLog /var/log/boa/access_log
3. html 文件存放目录, 可在boa.conf 文件中修改。
如: DocumentRoot /var/www
4. cgi 脚本存放目录, 可在boa.conf 文件中修改。
如: ScriptAlias /cgi-bin/ /var/www/cgi-bin
5. mime.types 存放目录, 可在boa.conf 文件中修改。
如: MimeTypes /etc/mime.types
5、字节序
字节序是一个处理器的架构特性
小端格式:将低位字节数据存储在低地址
大端格式:将高位字节数据存储在低地址
网络协议指定了通讯字节序--大端
字节序转换函数:
uint32_t htonl(uint32_t hostint32);
uint16_t htons(uint16_t hostint16);
以上返回网络字节序
uint32_t ntohl(uint32_t netint32);
uint16_t ntohs(uint16_t netint16);
以上返回主机字节序
#include <arpa/inet.h>
以上都是无符号整型之间的转换,即大端和小端之间的转换。
6、到点分十进制数串:
在网络传输中,IP是以一个32位无符号整型传输,而实际的IP以字符型表示,比如:192.168.222.66;
int inet_pton(int family, const char *strptr,void *addrptr);
family:什么协议,是inet就是AF_INET;
strptr:存IP的字符地址或指针
addrptr:字符长度的指针
成功返回1,否则返回0
const char *inet_ntop(int family,const void *addrptr,char *strptr,size_t len);
family:什么协议,是inet就是AF_INET;
addrptr:存网络(是无符号整型,一般是结构体中的&client_addr.sin_addr)IP的地址
strptr:存IP的字符地址或指针
len:存字符长度
#define INET_ADDRSTRLEN 16
#define INET6_ADDRSTRLEN 46 //for ipv6
7、TCP通信的过程
TCP的通信是在三次握手协议之后,服务器必须经过创建套接字、绑定套接字、监听套接字和接受套接字几个步骤。
对于通信双方可以使用系统调用read和write;也可以使用send和recv
#include <sys/socket.h>
ssize_t send(int sockfd, const void *buf,size_t nbytes, int flags);
ssize_t recv(int sockfd, void *buf,size_t nbytes, int flags);
返回读到或写到的字节数
sockfd:联络的套接字
buf:发送(存储)的缓存数据地址
nbytes:发送(存储)字节大小
flags:阻塞还是不阻塞等宏作用,一般为0阻塞
8、关闭套接字
对于TCP通信来说,要先关闭客户端才能关闭服务器文章来源:https://www.toymoban.com/news/detail-800967.html
关闭使用close()函数。文章来源地址https://www.toymoban.com/news/detail-800967.html
到了这里,关于嵌入式培训机构四个月实训课程笔记(完整版)-Linux网络编程第二天-TCP编程(物联技术666)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!