【JavaWeb】基本概念、web服务器、Tomcat、HTTP协议
目录
- 1. 基本概念
- 1.1 基本概念
- 1.2 web应用程序
- 1.3 静态web
- 1.4 动态web
- 2. web服务器
- 3. tomcat详解
- 3.1 安装
- 3.2 启动
- 3.3 配置
- 3.3.1 配置启动的端口号
- 3.3.2 配置主机的名称
- 3.3.3 其他常用配置项
- 日志配置
- 数据源配置
- 安全配置
- 3.4 发布一个网站
- 4. Http协议
- 4.1 什么是http
- 4.2 http的两个时代
- 4.3 http请求
- 4.4 http响应
1. 基本概念
1.1 基本概念
- 静态web:html,css(提供给所有人看的数据,始终不会发生变化)
- 动态web:Servlet/JSP,ASP,PHP,淘宝等几乎所有的网站
(提供给所有人看的数据,始终会发生变化,每个人在不同时间,不同地方看到的都不同)
1.2 web应用程序
web应用程序:可以提供浏览器访问的程序
- a.html、b.html等多个web资源,这些web资源可以被外界访问,对外界提供服务。
- 你们能访问到的任何一个页面或者资源,都存在于这个世界的某一个角落的计算机上。
- URL:统一资源定位符。
- 这个统一的web资源会被放在同一个文件夹下,web应用程序—>Tomcat:服务器。
- web应用程序编写完毕后,若想提供给外界访问:需要一个服务器来统一管理。
1.3 静态web
_ .htm, _ .html,这些都是网页的后缀,如果服务器上一直存在这些东西,我们就可以直接进行读取。
1.4 动态web
页面会动态展示:Web的页面展示的效果因人而异。
2. web服务器
服务器是一种被动的操作,用来处理用户的一些请求和给用户一些响应信息。
** IIS ** :
** IIS(Internet Information Services) ** 是微软开发的一款Web服务器软件,专为Windows操作系统设计。它主要用于托管网站、提供Web服务以及支持多种协议如HTTP、HTTPS等。IIS不仅易于安装和配置,还提供了强大的功能集,包括安全性控制、性能优化以及对多种Web技术的支持。
** Tomcat ** :
** Tomcat ** 则是Apache软件基金会下的一个项目,旨在提供一个运行Java Servlets和JavaServer Pages (JSP) 的环境。由于有Sun Microsystems(现Oracle Corporation)以及其他各方的支持,最新的Servlet和JSP规范通常能够在Tomcat中得到体现。例如,Tomcat 5支持了当时的最新标准Servlet 2.4和JSP 2.0规范。作为一个免费且开源的Web应用服务器,Tomcat因其轻量级特性而在中小型系统中被广泛采用,特别是在并发访问用户数量有限的情况下,它是开发和调试JSP程序的理想选择。
当在一台机器上配置好Apache服务器,可利用它响应HTML(标准通用标记语言下的一个应用)页面的访问请求。实际上Tomcat是Apache服务器的扩展,但运行时它是独立运行的,所以当你运行tomcat时,它实际上作为一个与Apache 独立的进程单独运行的。
虽然Tomcat起源于Apache项目,并且能够与Apache HTTP服务器协同工作以处理静态和动态内容,但它本身是一个独立的Servlet容器,专注于Java Web应用程序的执行。因此,在使用Tomcat进行Web开发时,开发者可以根据需要选择是否将其与Apache结合使用,或者单独利用Tomcat来满足项目需求。这种灵活性使得Tomcat成为Java Web应用开发中的重要工具。
3. tomcat详解
3.1 安装
3.2 启动
3.3 配置
Tomcat的配置主要通过编辑其配置文件来完成,这些文件通常位于conf
目录下。
3.3.1 配置启动的端口号
Tomcat默认使用8080端口作为HTTP服务端口。如果需要更改这个端口号,可以在conf/server.xml
文件中找到相应的<Connector>
元素并修改port
属性。
例如,将Tomcat的HTTP端口更改为8081:
<Connector port="8081" protocol="HTTP/1.1"connectionTimeout="20000"redirectPort="8443" />
port
: 指定Tomcat监听的端口号,mysql:3306;http:80;https:443。protocol
: 指定使用的协议类型,这里为HTTP/1.1。connectionTimeout
: 设置连接超时时间(毫秒),超过该时间未处理完请求则断开连接。redirectPort
: 当客户端请求的是HTTPS服务时,会重定向到此端口。
3.3.2 配置主机的名称
在server.xml
文件中,可以通过<Host>
元素配置虚拟主机。默认情况下,Tomcat使用localhost
作为主机名,并将其映射到127.0.0.1
。
例如,配置一个名为www.none.com
的虚拟主机:
<Host name="www.none.com" appBase="webapps"unpackWARs="true" autoDeploy="true">
</Host>
name
: 虚拟主机的域名。appBase
: 应用程序的基本目录,默认为webapps
。unpackWARs
: 是否自动解压WAR包,默认为true
。autoDeploy
: 是否自动部署新的应用程序,默认为true
。
3.3.3 其他常用配置项
日志配置
日志文件通常位于logs
目录下,可以通过编辑conf/logging.properties
文件来调整日志级别和输出格式。
数据源配置
如果应用需要连接数据库,可以在conf/context.xml
或应用的META-INF/context.xml
中配置数据源。
例如,配置MySQL数据源:
<Resource name="jdbc/myDB" auth="Container" type="javax.sql.DataSource"maxTotal="100" maxIdle="30" maxWaitMillis="10000"username="dbuser" password="dbpass" driverClassName="com.mysql.none.jdbc.Driver"url="jdbc:mysql://localhost:3306/mydatabase"/>
安全配置
为了提高安全性,可以配置SSL/TLS以启用HTTPS服务。这通常涉及到生成证书并在server.xml
中配置<Connector>
元素。
例如,配置HTTPS连接器:
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"maxThreads="150" SSLEnabled="true" scheme="https" secure="true"clientAuth="false" sslProtocol="TLS"keystoreFile="/path/to/keystore.jks" keystorePass="changeit"/>
** 请你谈谈网站是如何访问的? **
三次握手,交互。
- 输入URL:用户在浏览器地址栏中输入一个URL(统一资源定位符),比如
http://www.example.com
。这个URL包含了协议(如HTTP或HTTPS)、域名(如www.example.com
)和可能的路径(如/path/page.html
)。 - DNS解析:浏览器需要知道对应域名的IP地址才能建立连接。它首先会在本地缓存或者操作系统缓存中查找该域名对应的IP地址。如果找不到,就会向配置的DNS服务器发送请求查询该域名的IP地址。DNS服务器通过递归查询的方式找到正确的IP地址并返回给浏览器。
- 建立TCP连接:获取到目标服务器的IP地址后,浏览器会尝试与服务器建立TCP连接。这通常涉及到**三次握手 **的过程,以确保客户端和服务器双方都准备好进行数据传输。
- TLS握手(如果是HTTPS):如果使用的是HTTPS协议,还需要额外进行一次TLS(Transport Layer Security)握手来加密通信。这一步骤包括客户端和服务器之间的密钥交换、证书验证等操作,确保通信的安全性。
- 发送HTTP请求:一旦TCP连接建立完成(对于HTTPS还需完成TLS握手),浏览器会构造并发送一个HTTP请求报文到服务器。这个请求报文中包含诸如请求方法(
GET
、POST
等)、请求的URL、头部信息(Headers)以及可能的主体内容(Body)。 - 服务器处理请求:Web服务器接收到请求后,会根据请求的内容进行处理。如果是静态文件,服务器直接返回文件;如果是动态内容,则服务器可能会调用相应的脚本或应用程序来生成响应内容。
- 发送HTTP响应:服务器处理完请求后,会构建一个HTTP响应报文发回给浏览器。响应报文中包含状态行(表明请求的结果)、头部信息和响应体(通常是HTML文档或其他类型的数据)。
- 浏览器接收响应:浏览器接收到响应后,开始解析HTML文档,并根据文档中的指令加载CSS样式表、JavaScript脚本以及其他资源(如图片、视频等)。在这个过程中,浏览器可能会发起更多的HTTP请求来获取这些资源。
- 渲染页面:随着资源逐步加载完毕,浏览器开始构建DOM树、应用CSS样式,并执行JavaScript代码,最后将内容渲染到屏幕上供用户查看。
整个流程涉及了多种网络协议(如HTTP、HTTPS、TCP/IP)、技术栈(如HTML、CSS、JavaScript)以及中间件(如DNS服务器、Web服务器)。此外,现代浏览器还提供了许多优化措施,比如预取、预加载、压缩传输等,来提升网页加载速度和用户体验。
3.4 发布一个网站
tomcat的目录结构如下:
apache-tomcat-<version>/
├── bin/ # 存放启动、停止等脚本
│ ├── startup.sh # Linux下启动Tomcat的脚本
│ ├── shutdown.sh # Linux下停止Tomcat的脚本
│ ├── catalina.sh # Tomcat核心控制脚本
│ └── ... # 其他脚本文件
├── conf/ # 配置文件目录
│ ├── server.xml # 主配置文件,定义端口、连接器等
│ ├── web.xml # 默认Web应用部署描述符
│ ├── context.xml # 上下文配置文件
│ ├── tomcat-users.xml # 用户认证配置
│ └── ... # 其他配置文件如logging.properties等
├── lib/ # 共享库(JAR)目录
│ ├── servlet-api.jar # Servlet API实现
│ ├── jsp-api.jar # JSP API实现
│ └── ... # 其他必要的依赖库
├── logs/ # 日志文件目录
│ ├── catalina.out # 主要日志文件
│ ├── localhost_access_log.*.txt # HTTP请求访问日志
│ └── ... # 其他日志文件
├── webapps/ # Web应用程序部署目录
│ ├── ROOT/ # 默认根应用
│ ├── manager/ # 内置管理控制台
│ ├── examples/ # 官方示例应用
| ├──WEB-INF
| ├── classes # java程序
| ├── lib # 所依赖的jar包
| └── web.xml # 网页配置
| ├──static # 静态资源
| ├──index.html
| └──...
│ └── ... # 自定义的应用程序或WAR包
├── work/ # 运行时工作目录
│ └── Catalina/ # 存储编译后的JSP类文件
├── temp/ # 临时文件目录
├── LICENSE # 许可证文件
└── NOTICE # 版权声明
这部分是我们配置网站时所使用的:
├── webapps/ # Web应用程序部署目录
│ ├── ROOT/ # 默认根应用
│ ├── manager/ # 内置管理控制台
│ ├── examples/ # 官方示例应用
| ├──WEB-INF
| ├── classes # java程序
| ├── lib # 所依赖的jar包
| └── web.xml # 网页配置
| ├──static # 静态资源
| ├──index.html
| └──...
│ └── ... # 自定义的应用程序或WAR包
4. Http协议
4.1 什么是http
HTTP(超文本传输协议)是一个简单的请求-响应协议,它通常运行在TCP之上。
- 文本:html,字符串…
- 超文本:图片,音乐,视频,定位,地图…
- 默认端口:80
- HTTPS:安全的协议
- 默认端口:443
4.2 http的两个时代
- http1.0:客户端可以与web服务器连接后,只能获得一个web资源,断开连接。
- http2.0:客户端可以与web服务器连接后,可以获得多个web资源。
4.3 http请求
客户端—->发请求(request)—->服务器(比如:访问百度)
General
// 请求地址
Request URL: https://www.baidu.com/
// 请求方法
Request Method: GET
// 状态代码
Status Code: 200 OK
// 远程地址
Remote Address: 14.215.177.38:443
// 引用站点策略
Referrer Policy: strict-origin-when-cross-origin
Request Headers
Accept: text/html
Accept-Encoding: gzip, deflate, br
// 语言
Accept-Language: zh-CN,zh;q=0.9
Cache-Control: max-age=0
Connection: keep-alive
- 请求行
- 请求行中的请求方式:
GET
- 请求方式:
GET
,POST
,HEAD
,DELETE
,PUT
…
GET: 请求能够携带的参数比较少,大小有限制,会在浏览器的URL地址栏显示数据内容,不安全,但高效。
POST:请求能够携带的参数没有限制,大小没有限制,不会在浏览器的URL地址栏显示数据内容,安全,但不高效。
- 请求头(消息头)
Accept: 告诉浏览器,它所支持的数据类型
Accept-Encoding: 告诉浏览器,它支持哪种编码格式:GBK,UTF-8,GB2312,ISO8859-1
Accept-Language: 告诉浏览器,它的语言环境
Cache-Control: 缓存控制
Connection: 告诉浏览器,请求完成是断开还是保持
HOST:主机
4.4 http响应
Response Headers
// 缓存控制
Cache-Control: no-cache
// 保持连接(http1.1)
Connection: keep-alive
// 文本编码类型
Content-Encoding: gzip
// 响应类型
Content-Type: text/html;charset=utf-8
- 响应体
Accept: 告诉浏览器,它所支持的数据类型
Accept-Encoding: 告诉浏览器,它支持哪种编码格式:GBK,UTF-8,GB2312,ISO8859-1
Accept-Language: 告诉浏览器,它的语言环境
Cache-Control: 缓存控制
Connection: 告诉浏览器,请求完成是断开还是保持
HOST:主机
Refrush:告诉客户端,多久刷新一次
Location:让网页重新定位
- 响应状态码
- 200:响应成功
- 3xx:请求重定向(304等等)
- 4xx:找不到资源(404等等)
- 5xx:服务器代码错误(500代码错误,502网关错误)
当你的浏览器中地址栏输入地址并回车的一瞬间到页面能够展示回来,经历了什么?
- URL 解析
浏览器解析输入的 URL,提取协议(HTTP/HTTPS)、域名、路径等信息。
- DNS 解析
检查本地缓存(浏览器、系统、
hosts
文件),若无则通过 DNS 服务器递归查询,将域名转换为 IP 地址
- 建立 TCP 连接
通过 三次握手 与服务器建立可靠的 TCP 连接(SYN → SYN-ACK → ACK)。
- TLS 握手(**HTTPS **)
若为 HTTPS,进行 TLS 握手:证书验证、密钥交换,建立加密通道。
- 发送 HTTP 请求
浏览器发送 HTTP 请求(如
GET/index.html
),包含请求头(host、User-Agent 等)和请求体(如 GET 数据)。
- 服务器处理请求
服务器解析请求,执行逻辑(如查询数据库),生成响应内容(HTML、图片等)。
- 返回 HTTP 响应
服务器返回 HTTP 响应,包含状态码(如
200
OK)、响应头(Content-Type)和响应体(页面内容)。
- 浏览器渲染页面
解析 HTML :构建 DOM 树。
加载 CSS/JS :构建 CSSOM 树,执行 JavaScript。
渲染树合成 :合并 DOM 和 CSSOM,布局(Layout)并绘制(Paint)页面。
相关文章:

【JavaWeb】基本概念、web服务器、Tomcat、HTTP协议
目录 1. 基本概念1.1 基本概念1.2 web应用程序1.3 静态web1.4 动态web 2. web服务器3. tomcat详解3.1 安装3.2 启动3.3 配置3.3.1 配置启动的端口号3.3.2 配置主机的名称3.3.3 其他常用配置项日志配置数据源配置安全配置 3.4 发布一个网站 4. Http协议4.1 什么是http4.2 http的…...
黑马程序员C++核心编程笔记--4 类和对象--封装
C面向对象三大特征:封装、继承、多态 C认为万事万物皆对象,对象有其属性和行为,具有相同性质的对象可以抽象称为类 4.1 封装 4.1.1 封装的意义 将属性和行为作为一个整体,表现生活中的事物将属性和行为加以权限控制 在设计类…...
Debian:自由操作系统的精神图腾与技术基石
🔥「炎码工坊」技术弹药已装填! 点击关注 → 解锁工业级干货【工具实测|项目避坑|源码燃烧指南】 ——解码Linux世界最纯粹的开源哲学 一、Debian的诞生:从个人实验到全球协作 1993年,一位名为Ian Murdock的程序员在开源社区的启…...

云计算Linux Rocky day02(安装Linux系统、设备表示方式、Linux基本操作)
云计算Linux Rocky day02(安装Linux系统、设备表示方式、Linux基本操作) 目录 云计算Linux Rocky day02(安装Linux系统、设备表示方式、Linux基本操作)1、虚拟机VMware安装Rocky2、Linux命令行3、Linux Rocky修改字体大小和背景颜…...

在 ODROID-H3+ 上安装 Win11 系统
在 ODROID-H3 上安装 Windows 11 系统。 以下是完整的步骤,包括 BIOS 设置、U 盘制作、安装和驱动处理,全程不保留之前的系统数据。 ✅ 准备工作 1. 准备一个 ≥8GB 的 USB 启动盘 用另一台电脑制作 Windows 11 安装盘。 👉 推荐工具&…...
Docker常用命令操作指南(一)
Docker常用命令操作指南-1 一、Docker镜像相关命令1.1 搜索镜像(docker search)1.2 拉取镜像(docker pull)1.3 查看本地镜像(docker images)1.4 删除镜像(docker rmi) 二、Docker容器…...
什么是 SQL 注入?如何防范?
什么是 SQL 注入?如何防范? 1. SQL 注入概述 1.1 基本定义 SQL 注入(SQL Injection)是一种通过将恶意SQL 语句插入到应用程序的输入参数中,从而欺骗服务器执行非预期SQL命令的攻击技术。攻击者可以利用此漏洞绕过认证、窃取数据甚至破坏数据库。 关键结论:SQL 注入是O…...

使用el-input数字校验,输入汉字之后校验取消不掉
先说说复现方式 本来input是只能输入数字的,然后你不小心输入了汉字,触发校验了,然后这时候,你发现校验取消不掉了 就这样了 咋办啊,你一看校验没错啊,各种number啥的也写了,发现没问题啊 <el-inputv…...

Docker容器启动失败的常见原因分析
我们在开发部署的时候,用 Docker 打包环境,理论上是“我装好了你就能跑”。但理想很丰满,现实往往一 docker run 下去就翻车了。 今天来盘点一下我实际工作中经常遇到的 Docker 容器启动失败的常见原因,顺便给点 debug 的小技巧&a…...
Java提取markdown中的表格
Java提取markdown中的表格 说明 这篇博文是一个舍近求远的操作,如果只需要要对markdown中的表格数据进行提取,完全可以通过正在表达式或者字符串切分来完成。但是鉴于学习的目的,这次采用了commonmark包中的工具来完成。具体实现过程如下 实…...

立志成为一名优秀测试开发工程师(第七天)——unittest框架的学习
目录 unittest框架的学习 一、测试类的编写 创建相关测试类cal.py、CountTest.py 二、常见断言方法 使用unittest单元测试框架编写测试用例CountTest.py 注意:执行的时候光标一定要放在括号后面,鼠标右键运行 三、对测试环境的初始化和清除模块…...
精益数据分析(85/126):营收阶段的核心指标与盈利模型优化——从数据到商业决策的落地
精益数据分析(85/126):营收阶段的核心指标与盈利模型优化——从数据到商业决策的落地 c。 一、营收健康度的核心指标:投资回报率模型 (一)季度再发性营收增长率(QRR) 该指标衡量…...

论坛系统(4)
用户详情 获取用户信息 实现逻辑 ⽤⼾提交请求,服务器根据是否传⼊Id参数决定返回哪个⽤⼾的详情 1. 不传⽤⼾Id,返回当前登录⽤⼾的详情(从session获取) 2. 传⼊⽤⼾Id,返回指定Id的⽤⼾详情(根据用户id去查) 俩种方式获得用户信息 参…...
本地Markdown开源知识库选型指南
本地Markdown开源知识库选型指南 以下是几款优秀的本地Markdown开源知识库解决方案,适合不同需求场景: 1. Obsidian (非完全开源但免费) 特点:基于Markdown的本地优先知识管理,丰富的插件生态优势:双向链接、图形视…...
【.net core】SkiaSharp 如何在Linux上实现
1. 安装依赖库 首先需要安装 SkiaSharp 运行时依赖: # Ubuntu/Debian sudo apt-get update sudo apt-get install -y libfontconfig1 libfreetype6 libx11-6 libx11-xcb1 libxcb1 \libxcomposite1 libxcursor1 libxdamage1 libxi6 libxtst6 \libnss3 libcups2 lib…...
后端项目中静态文案国际化语言包构建选型
这是一个很关键的问题。在做国际化(i18n)时,不同语言包格式如 .resx、.properties 和 .json 都可用,但各自有适用场景、特性与限制,你在选择时可以根据你的开发语言、生态和维护成本权衡。 ✅ 一张对比表:.…...
前端面经 React常见的生命周期
初始化阶段 constructor state的初始化,防抖节流的绑定getDerivedStateFromProps 静态函数 当作纯函数使用 传入props和state,合并成一个新的statecomponentWillMount 组件如果有getDrivedStatefromprops不会执行 针对一些接口的预请求时使用rendercomp…...

力扣面试150题--二叉树的层平均值
Day 54 题目描述 思路 初次做法(笨):使用两个队列,一个队列存放树的节点,一个队列存放对应节点的高度,使用x存放上一个节点,highb存放上一个节点的高度,sum存放当前层的节点值之和…...

【Doris入门】Doris初识:分布式分析型数据库的核心价值与架构解析
目录 1 Doris简介与核心价值 2 Doris架构深度解析 2.1 Frontend(FE)架构 2.2 Backend(BE)架构 3 Doris核心概念详解 3.1 数据分布模型 3.2 Tablet与Replica 3.3 数据模型 4 Doris关键技术解析 4.1 存储引擎 4.2 查询执…...
C#面试问题41-60
41. What is the Singleton design pattern? Singleton is a class that only allows creating a single instance of itselt. 单例设计模式是一个类,它只允许创建自己的单个实例。 构造函数防止他在单例类以外的地方被调用。 使用情景:need a sing…...

数据结构与算法学习笔记(Acwing 提高课)----动态规划·区间DP
数据结构与算法学习笔记----动态规划区间DP author: 明月清了个风 first publish time: 2025.5.26 ps⭐️区间DP的特征在于子结构一般是一个子区间上的问题,涉及到的问题也非常多,如环形区间,记录方案数,高精度,二维…...
【合集】Linux——31个普通信号
Linux普通信号总表(1-31) 编号信号名触发原因默认动作1SIGHUP终端连接断开(如SSH会话终止)或守护进程重载配置(如nginx -s reload)终止进程2SIGINT用户输入CtrlC中断前台进程终止进程…...

从0到1搭建AI绘画模型:Stable Diffusion微调全流程避坑指南
从0到1搭建AI绘画模型:Stable Diffusion微调全流程避坑指南 系统化学习人工智能网站(收藏):https://www.captainbed.cn/flu 文章目录 从0到1搭建AI绘画模型:Stable Diffusion微调全流程避坑指南摘要引言一、数据集构…...
ASP.NET Core 中JWT的基本使用
文章目录 前言一、JWT与RBAC二、JWT 的作用三、RBAC 的核心思想四、使用1、配置文件 (appsettings.json)2、JWT配置模型 (Entity/JwtSettings.cs)3、服务扩展类,JWT配置 (Extensions/ServiceExtensions.cs)4、用户仓库接口服务5、认证服务 (Interface/IAuthService.…...
未来技术展望
应用场景:海量数据并行处理 技术融合: # 概念代码:量子加速的数据清洗 from quantum_processor import PhotonicProcessordef quantum_data_cleaning(data):# 使用光量子处理器并行处理千万级数据processor = PhotonicProcessor(model="Xanadu Borealis")return …...

从一到无穷大 #46:探讨时序数据库Deduplicate与Compaction的设计权衡
本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。 本作品 (李兆龙 博文, 由 李兆龙 创作),由 李兆龙 确认,转载请注明版权。 文章目录 引言Compaction AlgorithmsCompact Execution Flow Based On VeloxLocalMergeSource的…...

vue3 导出excel
需求:导出自带格式的excel表格 1.自定义二维数组格式 导出 全部代码: <el-button click"exportExcel">导出</el-button> const exportExcel () > {const data [[商品, 单价, 数量, 总价],[A, 100, 1.55, { t: n, f: B2*C2…...
带你手写React中的useReducer函数。(底层实现)
文章目录 前言一、为什么需要 Reducer?二、Reducer 的核心概念1. Reducer 函数2. useReducer 钩子 三,手写react中的useReducer 总结 前言 在 React 开发中,useReducer 是管理复杂状态逻辑的利器。它类似于 Redux 的简化版,允许我…...

day024-网络基础-TCP与UDP、DNS
文章目录 1. 李导推荐书籍2. OSI七层模型2.1 传输层2.2 网络层2.2.1 问:两端处于不同局域网的设备怎么网络通信? 2.3 数据链路层2.4 物理层2.5 图解OSI七层模型 3. 数据传输模式3.1 全双工3.2 半双工3.3 单工 4. TCP 3次握手4.1 抓包 5. TCP 4次挥手5.1 …...

专场回顾 | 重新定义交互,智能硬件的未来设计
自2022年起,中国智能硬件行业呈现出蓬勃发展的态势,市场规模不断扩大。一个多月前,“小智AI”在短视频平台的爆火将智能硬件带向了大众视野,也意味着智能硬件已不再仅仅停留在概念和技术层面,而是加速迈向实际落地应用…...