网络是怎么连接的
目录
URL
HTTP(超文本传输协议)
FTP(文件传输协议)
File
mailto
HTTP的方法
Socket
URL
- URL(Uniform Resource Locator)中文名为统一资源定位符,
- 它是互联网上用来标识某一资源的地址。
- 就像是现实生活中家庭住址一样,
- 通过这个地址可以准确地找到对应的资源,
- 比如一个网页、一张图片、一个文件等。
HTTP(超文本传输协议)
HTTP 是用于传输超媒体文档(例如 HTML)的应用层协议。
例如, “http://example.com”
FTP(文件传输协议)
FTP 主要用于在网络上进行文件的上传和下载。
File
“file” 协议主要用于访问本地计算机上的文件。
例如,“file:///C:/Users/Documents/report.html”</span>
mailto
“mailto” 是一种用于启动电子邮件客户端并创建新邮件的协议。
如 “mailto:someone@example.com”
HTTP的方法
GET: 访问Web服务器获取网页数据
POST:在表单中填写数据并发给服务器
PUT:替换服务器上的文件
DELETE:删除服务器上的文件
打开有一个图片和很多文字的网页.
浏览器向网页服务器请求数据,
服务器返回数据,
然后会在请求一次图片的数据,
浏览器再返回图片的数据
IP地址:
互联网协议地址,用于在网络环境中识别和定位这些设备
好像是现实生活中每栋房子都有一个独一无二的门牌号一样
Pv4 地址由 32 位二进制数组成
例如,“192.168.1.1”
IPv6由 128 位二进制数组成
例如,“2001:0db8:85a3:0000:0000:8a2e:0370:7334”
分类:
A类 例如,10.0.0.0 - 10.255.255.255 常用于大型企业内部网络
B类 例如,172.16.0.0 - 172.31.255.255 一些高校或者中型企业的园区网络可能会使用
C类 例如,192.168.1.0 - 192.168.1.255 家庭中的无线路由器通常会设备分配 C 类地址
D类 D 类地址的第一个字节范围是 224 - 239,它主要用于多播(组播)通信。
E类 E 类地址的第一个字节范围是 240 - 255,它是保留地址主要用于实验和研究目的。
DNS:
它就像是一个巨大的电话簿,
将人们容易记忆的域名(如baidu.com)
和计算机在网络中实际使用的 IP 地址(如 14.215.177.38)
相互映射起来。
DNS 是一个分层的分布式数据库系统。
它的最顶层是根域名服务器,
全球共有 13 组根域名服务器(用字母 A - M 表示)
当用户在浏览器中输入一个域名时,首先会向本地 DNS 服务器
(通常由互联网服务提供商提供)发送查询请求。
本地 DNS 服务器会先查看自己的缓存,
如果缓存中有该域名对应的 IP 地址,
就直接返回给浏览器。如果缓存中没有,
本地 DNS 服务器会向根域名服务器发送请求
,根域名服务器会告诉它应该去询问哪个顶级域名服务器。
然后本地 DNS 服务器向顶级域名服务器发送请求,
顶级域名服务器再引导它向二级域名服务器等更低级别的域名服务器询问,
直到找到该域名对应的 IP 地址,
并将其返回给浏览器。
-
用户输入网址
-
域名解析
- 查询浏览器缓存
- 向本地 DNS 服务器查询:
- DNS 服务器查询过程:
- 本地 DNS 缓存查询:如果缓存中有该域名对应的 IP 地址,就直接将结果返回给浏览器。
- 递归查询(如果缓存没有):引导本地 DNS 服务器向更下一级的域名服务器查询,直到找到域名对应的 IP 地址。
- 返回 IP 地址给浏览器:最后,本地 DNS 服务器将查询到的 IP 地址返回给浏览器。
建立连接
-
- 确定通信协议:浏览器根据网址中的协议部分(如 http 或 https)来确定要使用的通信协议。还需要进行 SSL/TLS 加密协议的握手过程。
- TCP 三次握手(以 HTTP 为例):
- 第一次握手:浏览器向服务器发送一个 SYN(同步)数据包,其中包含一个随机生成的序列号。这个序列号用于后续的数据传输顺序和确认。
- 第二次握手:服务器收到 SYN 数据包后,会返回一个 SYN - ACK(同步 - 确认)数据包。这个数据包中包含服务器自己生成的序列号,同时确认浏览器发送的序列号。
- 第三次握手:浏览器收到 SYN - ACK 数据包后,会发送一个 ACK(确认)数据包,确认服务器发送的序列号。通过这三次握手,浏览器和服务器之间建立了一个可靠的 TCP 连接,可以进行数据传输。
发送 HTTP 请求
-
- 构建请求报文:浏览器根据用户输入的网址和要获取的资源类型(如网页、图片、脚本等)构建 HTTP 请求报文。 请求报文包括请求行(包含请求方法,如 GET 用于获取资源;请求的 URL 路径;HTTP 协议版本)、 请求头部(包含如 User - Agent,表示浏览器的类型和版本;Accept,表示浏览器可以接受的内容类型等信息) 和请求体(对于某些请求方法,如 POST,会包含要发送的数据)。
- 发送请求:浏览器通过已经建立的 TCP 连接将请求报文发送给服务器。
服务器处理请求并返回响应
-
- 服务器接收请求:服务器的网络接口接收浏览器发送的请求报文,并将其传递给服务器软件(如 Apache、Nginx 等)进行处理。
- 处理请求:服务器软件根据请求报文中的 URL 路径和请求方法来查找对应的资源。
- 构建响应报文:服务器将找到的资源(或动态生成的内容)构建成响应报文。 响应报文包括响应行(包含 HTTP 协议版本;响应状态码,如 200 表示成功,404 表示未找到资源等;响应状态短语)、 响应头部(包含如 Content - Type,表示响应内容的类型;Content - Length,表示响应内容的长度等信息) 和响应体(包含实际的资源内容)。
- 发送响应:服务器通过 TCP 连接将响应报文发送回浏览器。
浏览器接收并处理响应
-
- 接收响应:浏览器通过 TCP 连接接收服务器发送的响应报文。
- 解析响应:浏览器首先查看响应状态码,判断请求是否成功。如果状态码是 200,表示成功获取资源, 浏览器会根据响应头部中的 Content - Type 来确定如何处理响应体中的内容。例如,如果是 “text/html”, 浏览器会解析 HTML 内容;如果是 “image/jpeg”,会显示图片等。
- 渲染网页(如果是 HTML):
- 解析 HTML:浏览器开始解析 HTML 内容,构建 DOM(文档对象模型)树。它会识别 HTML 标签, 将标签转换为 DOM 节点,并确定它们之间的层次关系。
- 加载外部资源:浏览器在解析 HTML 时,会发现一些标签用于引用外部资源,如
<link>
标签用于 引用 CSS 样式表,<script>
标签用于引用 JavaScript 脚本,<img>
标签用于引用图片等。浏览器 会根据这些标签的属性(如 src 属性用于指定资源的位置)发送新的请求来获取这些外部资源。 - 渲染页面布局和样式:浏览器结合 DOM 树和获取到的 CSS 样式表来确定页面的布局和样式。它会计算 每个元素的位置、大小等属性,并将它们绘制到屏幕上。
- 执行 JavaScript:对于加载的 JavaScript 脚本,浏览器会执行它们。JavaScript 可以用于操作 DOM 树, 实现动态效果,如添加、删除或修改网页元素;也可以用于发送异步请求(如 AJAX 请求)来获取新的 数据并更新页面等。
Socket
- Socket(套接字)是一种在网络编程中用于实现进程间通信(IPC)的机制, 它提供了应用程序和网络协议栈之间的接口。可以把 Socket 想象成一个电话插孔, 不同的应用程序(就像不同的电话)通过这个插孔与网络(电话线网络)进行通信。 它使得应用程序能够在网络上发送和接收数据,无论是在本地网络还是互联网环境中。
建立 Socket 连接的过程(以 TCP 为例)
服务器端操作
- 创建 Socket 对象:服务器首先需要创建一个 Socket 对象。在编程语言中, 通常会调用相关的 Socket 库函数来完成这一操作。例如,在 Python 中, 可以使用
socket.socket(socket.AF_INET, socket.SOCK_STREAM)
来创建一个 TCP Socket。 这里AF_INET
表示使用 IPv4 地址族,SOCK_STREAM
表示使用 TCP 协议。这个操作相当 于在服务器端准备了一个通信端点,等待客户端来连接。 - 绑定地址和端口:创建 Socket 后,服务器需要将这个 Socket 绑定到一个特定的 IP 地址和端口号上。 IP 地址用于在网络中定位服务器,端口号则用于区分不同的服务。例如,Web 服务器通常使用端口 80(HTTP) 或 443(HTTPS)。在 Python 中,可以使用
bind((host, port))
方法来实现绑定,其中host
是服务器的 IP 地址port
是端口号。这一步就好比给电话插孔分配一个唯一的电话号码,使得客户端能够找到这个服务器。 - 监听连接请求:绑定完成后,服务器开始监听来自客户端的连接请求。这通过调用
listen()
函数来实现, 它会将服务器的 Socket 设置为监听状态,等待客户端的连接。在这个阶段,服务器就像一个电话总机, 等待着来电(客户端连接请求)
客户端操作
-
- 创建 Socket 对象:客户端同样需要创建一个 Socket 对象,方式与服务器类似。 例如,在 Python 中也是使用
socket.socket(socket.AF_INET, socket.SOCK_STREAM)
来创建一个 TCP Socket,用于与服务器进行通信。这相当于客户端准备好自己的电话, 以便拨打服务器的 “电话”。 - 发起连接请求:客户端创建 Socket 后,使用
connect((server_host, server_port))
方法向服务器发起连接请求。这里server_host
是服务器的 IP 地址,server_port
是服务器监听的端口号。这个过程就像客户端拨打服务器的 “电话号码”,尝试建立通信连接。
- 创建 Socket 对象:客户端同样需要创建一个 Socket 对象,方式与服务器类似。 例如,在 Python 中也是使用
三次握手过程(TCP 连接建立)
-
- 第一次握手:客户端向服务器发送一个 SYN(同步)数据包。这个数据包中包含一个随机生成的 初始序列号(Sequence Number),用于后续的数据传输顺序和确认。例如,假设客户端生成的序列号为
x
, 这个 SYN 数据包就像是客户端向服务器发出的 “我想和你建立连接,我的初始序列号是x
” 的信号。 - 第二次握手:服务器收到客户端的 SYN 数据包后,会向客户端返回一个 SYN - ACK(同步 - 确认)数据包。 这个数据包包含两个重要信息:一是服务器自己生成的初始序列号(假设为
y
),二是对客户端发送的序列号x
的确认(ACK = x + 1
)。这相当于服务器回复客户端 “我收到你的连接请求了,我的初始序列号是y
, 我确认收到你的序列号x
,现在我们可以开始通信了”。 - 第三次握手:客户端收到服务器的 SYN - ACK 数据包后,会发送一个 ACK(确认)数据包给服务器。 这个 ACK 数据包中的确认号是
y + 1
,用于确认收到服务器的序列号y
。通过这三次握手, 客户端和服务器之间就建立了一个可靠的 TCP 连接,就像双方通过电话建立了稳定的通话通道,可以开始进行数据传输了。
- 第一次握手:客户端向服务器发送一个 SYN(同步)数据包。这个数据包中包含一个随机生成的 初始序列号(Sequence Number),用于后续的数据传输顺序和确认。例如,假设客户端生成的序列号为
数据传输阶段
-
- 发送数据:连接建立后,无论是客户端还是服务器都可以通过已经建立的 Socket 发送数据。 在编程中,通常使用
send()
或write()
函数来发送数据。例如,在 Python 中,客户端 可以使用socket.send(data)
将数据data
发送给服务器。数据会被网络协议栈分割成 合适大小的数据包,并添加 TCP 头部(包括序列号、确认号等信息),然后通过网络发送给对方。 - 接收数据:对方(服务器或客户端)使用
recv()
或read()
函数来接收数据。例如,服务器可以 使用socket.recv(buffer_size)
来接收客户端发送的数据,其中buffer_size
表示接收缓冲区的大小。 当数据包到达接收端时,网络协议栈会根据 TCP 头部的信息进行排序、确认等操作,将数据组装成完整的消息并传递给应用程序。
- 发送数据:连接建立后,无论是客户端还是服务器都可以通过已经建立的 Socket 发送数据。 在编程中,通常使用
关闭 Socket 连接
-
- 主动关闭(以客户端为例):当数据传输完成后,客户端可以主动关闭 Socket 连接。 这通过调用
close()
函数来实现。在关闭之前,客户端会向服务器发送一个 FIN(结束)数据包, 告知服务器自己不再发送数据了。 - 四次挥手过程(TCP 连接关闭)
- 第一次挥手:客户端发送 FIN 数据包,表示自己没有数据要发送了,请求关闭连接。
- 第二次挥手:服务器收到 FIN 数据包后,会发送一个 ACK 数据包给客户端,确认收到客户端的关闭请求。 此时,服务器可能还有数据要发送给客户端,所以连接还不能完全关闭。
- 第三次挥手(如果服务器也没有数据要发送):当服务器发送完剩余的数据后,它会向客户端发送一个 FIN 数据包,表示自己也没有数据要发送了,请求关闭连接。
- 第四次挥手:客户端收到服务器的 FIN 数据包后,会发送一个 ACK 数据包给服务器,确认收到服务器的 关闭请求。经过这四次挥手,TCP 连接才完全关闭,双方释放占用的资源。
- 主动关闭(以客户端为例):当数据传输完成后,客户端可以主动关闭 Socket 连接。 这通过调用
相关文章:
网络是怎么连接的
目录 URL HTTP(超文本传输协议) FTP(文件传输协议) File mailto HTTP的方法 Socket URL URL(Uniform Resource Locator)中文名为统一资源定位符,它是互联网上用来标识某一资源的地址。就…...
Java 实现PDF添加水印
maven依赖: <dependency><groupId>com.itextpdf</groupId><artifactId>itextpdf</artifactId><version>5.4.3</version> </dependency>网络地址添加水印代码: public static boolean waterMarkNet(Stri…...
网络安全问题概述
1.1.计算机网络面临的安全性威胁 计算机网络上的通信面临以下的四种威胁: (1) 截获——从网络上窃听他人的通信内容。 (2) 中断——有意中断他人在网络上的通信。 (3) 篡改——故意篡改网络上传送的报文。可应用于域名重定向,即钓鱼网站。 (4) 伪造——伪…...
(udp)网络编程套接字Linux(整理)
源IP地址和目的IP地址 唐僧例子1 在IP数据包头部中, 有两个IP地址, 分别叫做源IP地址, 和目的IP地址.思考: 我们光有IP地址就可以完成通信了嘛? 想象一下发qq消息的例子, 有了IP地址能够把消息发送到对方的机器上,但是还需要有一个其他的标识来区分出, 这个数据要给哪个程序进…...
Web应用安全入门:架构搭建、漏洞分析与HTTP数据包处理
Web应用安全入门:架构搭建、漏洞分析与HTTP数据包处理 引言 在当今数字化时代,Web应用已成为企业和个人在线交互的核心。然而,随着技术的发展,Web应用面临的安全挑战也日益增加。本文旨在为初学者提供一个关于Web应用架构搭建、…...
[JAVA]MyBatis框架—获取SqlSession对象
SqlSessionFactory作为MyBatis框架的核心接口有三大特性 SqlSessionFactory是MyBatis的核心对象 用于初始化MyBatis,创建SqlSession对象 保证SqlSessionFactory在应用中全局唯一 1.SqlSessionFactory是MyBatis的核心对象 假设我们要查询数据库的用户信息&#x…...
Perl 简介
Perl 简介 Perl 是一种高级、通用、解释型、动态编程语言。由 Larry Wall 于 1987 年首次发布,它结合了 C、sed、awk 和 shell 脚本语言的特性。Perl 最初被设计用于文本处理,如报告生成和文件转换,但随着时间的推移,它已经发展成…...
spring-bean的销毁流程
1 引入 在 Spring 框架中,Bean 的生命周期管理是其核心功能之一,而 Bean 的注销(Destruction)是生命周期的最后一步。无论是关闭数据库连接、释放线程资源,还是执行缓存持久化操作,合适的销毁策略都至关重…...
问:Spring MVC DispatcherServlet流程步骤梳理
DispatcherServlet是Spring MVC框架中的核心组件,负责接收客户端请求并将其分发到相应的控制器进行处理。作为前端控制器(Front Controller)的实现,DispatcherServlet在整个请求处理流程中扮演着至关重要的角色。本文将探讨Dispat…...
用源码编译虚幻引擎,并打包到安卓平台
用源码编译虚幻引擎,并打包到安卓平台 前往我的博客,获取更优的阅读体验 作业内容: 源码编译UE5.4构建C项目,简单设置打包到安卓平台 编译虚幻 5 前置内容 这里需要将 Epic 账号和 Github 账号绑定,然后加入 Epic 邀请的组织,…...
快速搭建Android开发环境:Docker部署docker-android并实现远程连接
目录 前言 1. 虚拟化环境检查 2. Android 模拟器部署 3. Ubuntu安装Cpolar 4. 配置公网地址 5. 远程访问 小结 6. 固定Cpolar公网地址 7. 固定地址访问 作者简介: 懒大王敲代码,计算机专业应届生 今天给大家聊聊快速搭建Android开发环境&#x…...
「Mac玩转仓颉内测版21」基础篇1 - 仓颉程序的基本组成
本篇将系统介绍Cangjie编程语言中程序的基本组成部分,涵盖 main 函数的定义、包与模块的使用、变量类型、作用域和代码结构原则,帮助开发者理解Cangjie程序的整体结构。 关键词 程序入口点main函数包与模块变量类型与作用域值类型与引用类型代码结构与规…...
【Linux网络编程】简单的UDP套接字
目录 一,socket编程的相关说明 1-1,sockaddr结构体 1-2,Socket API 二,基于Udp协议的简单通信 三,UDP套接字的应用 3-1,实现英译汉字典 一,socket编程的相关说明 Socket编程是一种网络通信…...
在Vue中使用Excalidraw实现在线画板
概述 Excalidraw是一个非常好用的画图板工具,但是是用React写的,本文分享一种在Vue项目中使用的方法。 效果 实现 Excalidraw简介 这篇文章(Excalidraw 完美的绘图工具:https://zhuanlan.zhihu.com/p/684940131)介绍的很全面,…...
游戏+AI的发展历程,AI技术在游戏行业的应用有哪些?
人工智能(AI)与游戏的结合,不仅是技术进步的体现,更是人类智慧的延伸。从最初的简单规则到如今的复杂决策系统,AI在游戏领域的发展历史可谓波澜壮阔。 早在2001年,就有研究指出游戏人工智能领域࿰…...
Methode Electronics EDI 需求分析
Methode Electronics 是一家总部位于美国的全球性技术公司,专注于设计和制造用于多个行业的电子和电气组件,产品涵盖汽车、工业、电信、医疗设备以及消费电子等多个领域,提供创新的解决方案。 填写Methode_EDI_Parameters_Template Methode_…...
2023AE软件、Adobe After Effects安装步骤分享教程
2023AE软件是一款由Adobe公司开发的视频编辑软件,也被称为Adobe After Effects。它在广告、电影、电视和网络视频等领域广泛应用,用于制作动态图形、特效、合成和其他视觉效果。该软件支持多种视频和音频文件格式,具有丰富的插件和预设&#…...
【前端】JavaScript 变量引用、内存与数组赋值:深入解析三种情景
博客主页: [小ᶻZ࿆] 本文专栏: 前端 文章目录 💯前言💯场景一:直接赋值与重新引用为什么结果不是 [3, 4, 5]?1. 引用与赋值的基本概念2. 图示分析 关键总结 💯场景二:引用指向的变化为什么…...
本地项目运行提示跨域问题
项目背景:我使用phpwebstudy在本地搭建了一个项目,然后前端是http://localhost:8080/ 后端我直接创建了一个本地域名,例如www.abc.com 然后vue.config.js配置如下,这个配置在我所有线上环境是没有任何问题的 devServer: {proxy…...
C++ —— string类(上)
目录 string的介绍 string类功能的使用介绍 constructor —— 构造 介绍使用(1)(2)(4) :构造、拷贝构造、带参构造 介绍(3):拷贝string类对象的一部分字符…...
React Native Mac 环境搭建
下载 Mac 版Android Studio 下载 安装 JDK 环境 Flutter 项目实战-环境变量配置一 安装 Node.js 方式一 通过Node.js 官网下载 下载完成后点击安装包进行安装 安装完成...
Python Web 开发的路径管理艺术:FastAPI 项目中的最佳实践与问题解析20241119
Python Web 开发的路径管理艺术:FastAPI 项目中的最佳实践与问题解析 引言:从路径错误到模块化管理的技术旅程 在现代 Python Web 开发中,路径管理是一个常常被忽视却非常重要的问题。尤其是在使用像 FastAPI 和 Tortoise ORM 这样的框架时…...
Rust derive macro(Rust #[derive])Rust派生宏
参考文章:附录 D:派生特征 trait 文章目录 Rust 中的派生宏 #[derive]基础使用示例:派生 Debug 派生其他常用特征示例:派生 Clone 和 Copy 派生宏的限制和自定义派生自定义派生宏上面代码运行时报错了,以下是解释 结论…...
springboot嗨玩旅游网站
摘 要 嗨玩旅游网站是一个专为旅行爱好者打造的在线平台。我们提供丰富多样的旅游目的地信息,包括景点信息、旅游线路、商品信息、社区信息、活动推广等,帮助用户轻松规划行程。嗨玩旅游网站致力于为用户提供便捷、实用的旅行服务,让每一次旅…...
杰发科技AC7840——EEP中RAM的配置
sample和手册中示例代码的sram区地址定义不一样 这个在RAM中使用没有限制,根据这个表格留下足够空间即可 比如需要4096字节的eep空间,可以把RAM的地址改成E000,即E000-EFFF,共4096bytes即可。...
从零开始的c++之旅——map_set的使用
1.序列式容器和关联式容器 序列式容器:逻辑结构为线性序列的数据结构,两个位置之间没有紧密的关系,比如两者交换一下还是序列式的容器,例如string,vector,deque,array等。 关联式容器࿱…...
Docker中的一些常用命令
find / -type f -name “文件名” 2>/dev/null 寻找所有目录中的这个文件 pwd 查看当前目录的地址 docker pull 镜像名 强制拉镜像 docker run 运行docker systemctl daemon-reload 关闭docker systemctl start docker 启动docker systemctl restart docker 重启docker /…...
自存 sql常见语句和实际应用
关于连表 查询两个表 SELECT * FROM study_article JOIN study_article_review 查询的就是两个表相乘,结果为两个表的笛卡尔积 相这样 这种并不是我们想要的结果 通常会添加一些查询条件 SELECT * FROM study_articleJOIN study_article_review ON study_art…...
python | argparse模块在命令行的使用中的重要作用
import argparseclass TestCases:def __init__(self, nameNone, expect_resultNone):self.name nameself.expect expect_resultself.parser argparse.ArgumentParser() # 创建命令解析器self.add_arguments() # 方法 : 添加命令self.args, _ self.parser.par…...
【HCIP]——OSPF综合实验
题目 实验需求 根据上图可得,实验需求为: 1.R5作为ISP:其上只能配置IP地址;R4作为企业边界路由器,出口公网地址需要通过PPP协议获取,并进行CHAP认证。(PS:因PPP协议尚未学习&#…...
阿里云的云服务器做网站用哪种/百度推广总部客服投诉电话
如果懂位的运算,看到下面这2个程序执行的结果,会很容易理解,如果像我这样的菜鸟,刚接触开始肯定也觉得晕晕的,| 这是什么运算符? |就是位的或运算符,下面还是用上面的程序来讲解一下,…...
哪里有网络推广公司/蜗牛精灵seo
我想对定义9.1.10(闭包)做一点延伸.有些人可能会混淆闭包和闭集的定义.其实,闭集的说法不针对某个特定的集合,我们不会说"某个集合的闭集",但是我们会说"某个集合的闭包".下面我来证明 集合$A$的闭包肯定是闭集. 这是因为假若一个集合A的闭包不是闭集&…...
乐安网站建设/品牌营销公司
MyBatis 是支持普通 SQL查询。存储过程和高级映射的优秀持久层框架。MyBatis 消除了差点儿全部的JDBC代码和參数的手工设置以及结果集的检索。MyBatis 使用简单的 XML或注解用于配置和原始映射,将接口和 Java 的POJOs(Plain Old Java Objects,…...
巴南集团网站建设/seo概念
最近项目中新增的功能,需要对手机号、姓名、身份证号等一些信息进行验证,最好的方法是通过正则表达式来验证,网上查了一些资料,写了这几个工具方法。 1、验证手机号 规则:第一位只能是1,第二位为3-8中的数字…...
广告设计公司的成本票项目有哪些/seo文章生成器
公众号:布袋书生在Python中计算的过程为:先计算等号右边两个数的值,然后依次对应赋给等号右边的两个变量,即:同时计算等号右边的b和ab,然后b的值赋给等号左边的参数a。ab的值赋给等号左边的参数b。看一下下…...
扮家家室内设计平台/seo关键词优化推广价格
在我东,下下来一个项目总会出现启动不了的问题,这些问题往往在编译的时候发现不了,当你的服务器启动的时候,就是一片片的报错,有些问题可以通过异常的提示信息,判断出来哪里配置错了,但是也有些…...