网络编程(7)
【0】复习
modbus rtu与modbus tcp区别:都遵循主从问答
Modbus TCP:以太网 报文头(7) 功能码(1) 数据 读数据、写单个、写多个
Modbus RTU:串口 地址码(1) 功能码(1) 数据 校验位(2)
Modbus 库:创建实例、设置从机ID、建立连接、寄存器操作、关闭套接字、释放实例
HTTP协议:基于TCP的超文本传输协议、应用层,工作在B/S架构,采用80 作为默认端口、特点(无连接、媒体独立、无状态)、请求格式:请求行(请求方法 url 协议版本 )请求头部 空行 请求数据
响应格式:状态行(协议版本 状态码 状态码描述)消息头部 空行 响应数据
【1】源码分析
- 初始化服务器
- 循环等待链接,连接成功之后创建线程,调用线程函数,在线程函数中调用handler_msg函数接收并处理请求
- handler_msg函数中,接收请求,查看请求报文,根据请求报文分离请求方法、url以及get请求携带的参数,如果请求方法及不是get也不是post,直接405返回退出。确定请求资源的路径(拼接wwwroot),如果拼接的路径不存在则返回404网页。
- 如果是post请求或者是get请求携带参数的情况做标记(need_handler=1)的情况下,要处理请求数据在handler_request中。如果没做标记,清空包头,并根据请求的资源做出响应(直接回复请求的文件)
- 在handler_request中,判断请求方法是什么,如果是get请求则清空缓冲区中报文,如果是post请求,循环读取缓冲区中请求头部,获取请求数据的长度,然后从缓冲区中获取请求内容,准备开始响应
- 响应:首先回复状态行以及空行,在parse_and_process中处理get请求携带的参数以及post请求携带的数据,根据不同的请求数据做不同的逻辑处理回复不同的响应正文
【2】postman
第六步输入的内容就是服务器收到的post请求的请求数据
【3】HTML
1.开发环境:vscode
- 可以在wwwroot下面新建一个文件,例如:example.html
- 安装库open in browser
库安装完成后,在编写文本位置右击->open in other browser->选择合适的浏览器即可在网页显示html标签内容
输入html,选择html:5或者!回车或者!回车可以将框架进行搭建
2.html简介
HTML(英文Hyper Text Markup Language的缩写)中文译为“超文本标记语言”。是用来描述网页的一种语言。
所谓超文本,因为它可以加入图片、声音、动画、多媒体等内容,不仅如此,它还可以从一个文件跳转到另一个文件,与世界各地主机的文件连接。
HTML 不是一种编程语言,而是一种标记语言 (markup language)
Web 浏览器的作用是读取 HTML 文档,并以网页的形式显示出它们。浏览器不会显示 HTML 标签,而是使用标签来解释页面的内容
3.html标签
标签格式
有尖括号包围关键字,如:<html>
通常成对存在,如:<body> </boby>
上面的标签叫做开始标签,后面的标签是结束标签
标签的分类
(1)单标签:也称空标签 <标签名 /> 如:<br/> <meta>
(2)双标签:成对存在 <标签名> 内容 </标签名>
4.常用标签
1)标题标签:h1-h6
格式:<hn> 标题文本 </hn>
举例:
<h1>这是标题标签</h1>
<h2>这是标题标签</h2>
<h3>这是标题标签</h3>
<h4>这是标题标签</h4>
<h5>这是标题标签</h5>
<h6>这是标题标签</h6>
2)段落标签:p
一个段落中会根据浏览器窗口的大小自动换行
格式:<p> 文本内容 </p>
3)换行标签:br
格式:<br />
4)块标签:div
是一个块级元素,可以把文档分割为独立的、不同的部分,可以在div中嵌套标签
举例:
<div class="news">
<h2>News headline 1</h2>
<p>some text. some text. some text...</p>
</div>
注:可以给div设置class或id,通过选择器设置属性,则内部成员具有相同属性
5)表单标签:input
表示输入意思,是单标签
格式:<input type=”” name=”” value=”” id=””.....>
属性有多种:
这里重点讲type为text、radio
当type为text,表示是文本输入框
用法:<input type=”text” value=”文本框默认值” >
当type为radio,表示是单选框
用法:<input type=”radio” name=”控件名称” value=”提交的数值” οnclick=”处理函数” checked=”checked”>
解释:name:控件名称,同一组单选框设置相同名称
//Value:必须要有,是当点击时会提交的数据
Onclick:点击时会执行双引号中的处理函数
Checked:默认选中,同一组中只设置一个即可
xhr.readyState属性代表XMLHttpRequest对象的状态。它有5个取值:
0 (未初始化):尚未调用open()方法。
1 (已初始化):已经调用open()方法,但尚未调用send()方法。
2 (发送中):已经调用send()方法,但尚未接收到响应。
3 (接收中):已经接收到部分响应数据。
4 (已完成):已经接收到全部响应数据,并且可以使用该响应。
xhr.status属性代表服务器返回的HTTP状态码。其中200表示OK,表示请求成功。其他常见的状态码有404表示找不到请求的资源,500表示服务器内部错误等。
<!DOCTYPE html> <!--声明此文档为h5文档-->
<html lang="en"> <!--该网页为HTML网页,语言为英语--><head><meta charset="UTF-8"> <!--描述网页属性的--><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>25041</title> <!--标题标签--><script>//做外部引用function fun() {//改变文本输入框内容var v = document.getElementsByName("user");//v[0]:表示找到的第一个符合条件的标签// v[0].value = "hello world";//创建对象var x = new XMLHttpRequest();//初始化x.open("post", "", true);// true:异步通知x.send("get");//检测状态发生改变x.onreadystatechange = function () {//=:赋值//==:判断,不区分数据类型//===:判断,区分数据类型if (x.readyState === 4 && x.status === 200) {var r= x.responseText;//响应正文var s=r.split(",");console.log(s);v[0].value=s[0]+s[1];//拼接字符串}}}function set(params) {if (params == 'man')console.log("I AM SUPERMAN");if (params == 'woman')console.log("I AM WOMAN");}</script>
</head><body>HTML(英文Hyper Text Markup Language的缩写)中文译为“超文本标记语言”。是用来描述网页的一种语言。<br><br><br><br><!--input:表单标签 text:单行文本输入框--><input type="text" name="user" value="请输入姓名"><!--input:表单标签 button:按钮--><input type="button" name="ikun" value="刷新" onclick="fun()"><br>sex:<!--input:表单标签 radio:单选按钮--><!--进行单选选项时,name必须相同-->男:<input type="radio" name="sex" id="man" checked="checked" onclick="set(id)">女:<input type="radio" name="sex" id="woman" onclick="set(id)"><br><br><br><br><div style="color: green; background: pink;">所谓超文本,因为它可以加入图片、声音、动画、多媒体等内容,不仅如此,它还可以从一个文件跳转到另一个文件,与世界各地主机的文件连接。<p>HTML 不是一种编程语言,而是一种标记语言 (markup language)</p>Web 浏览器的作用是读取 HTML 文档,并以网页的形式显示出它们。浏览器不会显示 HTML 标签,而是使用标签来解释页面的内容<h1>这是标题标签</h1><h2>这是标题标签</h2></div><h3>这是标题标签</h3><h4>这是标题标签</h4><h5>这是标题标签</h5><h6>这是标题标签</h6></body></html>