当前位置: 首页 > news >正文

HTTPS通讯全过程

HTTPS通讯全过程

不得不说,https比http通讯更加复杂惹。在第一次接触https代码的时候,不知道为什么要用用证书,公钥是什么?私钥是什么?他们作用是什么?非对称加密和对称加密是啥?天,这些似懂非懂的概念,大大增加了我写代码的困难(本人就是不理解原理就浑身难受那种人惹,代码写着写着就想为什么要这样写,牛角尖一枚罢噜)。如果你也有这样的疑问,那么就让我们一起来看看这篇文章吧~~啾咪
在这里插入图片描述


文章目录

  • HTTPS通讯全过程
    • 一、https握手阶段
      • 1、按双方的操作步骤分
        • (1)客户端开始握手
        • (2)服务器响应
        • (3)客户端验证证书
        • (4)客户端生成 premaster-secret
        • (5)客户端将发送预主密钥
        • (6)服务端获取premaster-secret
        • (7)双方生成对称加密用的密钥key
        • (8)客户端finish
        • (9)服务端finish
        • (10)握手结束
      • 2、按消息发送分
        • (1)客户端ClientHello
        • (2)服务器ServerHello
        • (3)客户端将发送预主密钥
          • 【1】验证证书
          • 【2】生成permaster-secret
          • 【3】对permaster-secret加密
        • (4)客户端finish
          • 【1】服务器对预主密钥进行解密
          • 【2】双方生成对称加密密钥KEY
          • 【3】发送finish信息
        • (5)服务器finish
    • 二、通讯阶段
    • 三、其他概念
      • 1、信任链
      • 信任锚点:
      • 信任链断裂:
      • 2、证书链
        • (1)中间证书:
        • (2)根证书:
        • (3)信任模型:
        • (4)验证过程:
        • (5)证书吊销检查:
        • (6)证书属性:
        • (7)证书路径长度:
        • (8)交叉认证证书:
        • (9)信任决策:
      • 3、CA、根CA证书、中间CA证书
        • (1)CA:
        • (2)根CA证书:
        • (3)中间CA证书
        • (4)在证书中理解信任链
        • (5)使用类似派生的方法形成一级一级的证书的优势
      • 4、数字签名
        • 1、签发机构(CA)的私钥:
        • 2、证书内容的哈希值:
        • 3、加密哈希值:
        • 4、附加到证书:
        • 5、验证过程:
        • 6、信任链:
      • 5、数字证书
        • 1、身份验证:
        • 2、公钥和私钥:
        • 3、证书内容:
        • 4、数字签名:
        • 5、信任链:
        • 6、证书吊销:
        • 7、证书类型:
        • 8、用途:
        • 9、有效期:


一、https握手阶段

1、按双方的操作步骤分


(1)客户端开始握手

客户端通过发送一个 “ClientHello” 消息开始 TLS 握手。此消息包含客户端支持的 TLS 版本、一个客户端生成的随机数(client_random)、加密套件列表(cipher suites)、压缩算法列表,以及其他 TLS 扩展。

(2)服务器响应

服务器接收 “ClientHello” 消息后,回复一个 “ServerHello” 消息。此消息包含选定的 TLS 版本、一个服务器生成的随机数(server_random)、加密套件和压缩算法以及数字证书、证书链,证书链包括服务器的公钥证书和任何中间 CA 证书(但不含根 CA 证书)。服务器还可能发送一个 “ServerKeyExchange” 消息(如果需要),包含服务器的公钥或 Diffie-Hellman 参数。

(3)客户端验证证书

客户端验证服务器证书的有效性,包括证书链的完整性、证书是否过期、是否被受信任的 CA 签发、证书的域名是否与服务器域名匹配等

(4)客户端生成 premaster-secret

客户端使用算法生成premaster-secret,premaster-secret的生成有几种算法,具体使用那种算法,由前面的加密套件确定。

(5)客户端将发送预主密钥

客户端将premaster-secret使用ServerHello的证书中的公钥对premaster-secret进行加密得到的密文就是预主密钥。客户端将预主密钥发送给服务端。

(6)服务端获取premaster-secret

服务器使用私钥将预主密钥解密,得到premaster-secret。

(7)双方生成对称加密用的密钥key

双方根据ClientHello和ServerHello以及premaster-secret作为参数,使用相同的算法生成相同的密钥KEY,这样生成的KEY就是安全的。具体使用什么算法,也是由前面的加密套件协商选择的。

(8)客户端finish

客户端使用刚刚得到的KEY将握手结束信息加密,发送给服务端。

(9)服务端finish

服务端收到客户端的信息后使用KEY解密,并将客户端的握手结束信息使用KEY加密,发送给客户端。

(10)握手结束

客户端收到服务端发来的信息,使用KEY解密得到服务端的结束信息,随即结束握手阶段。


2、按消息发送分


(1)客户端ClientHello

客户端通过发送一个 “ClientHello” 消息开始 TLS 握手。此消息包含客户端支持的 TLS 版本、一个客户端生成的随机数(client_random)、加密套件列表(cipher suites)、压缩算法列表,以及其他 TLS 扩展。

(2)服务器ServerHello

服务器接收 “ClientHello” 消息后,回复一个 “ServerHello” 消息。此消息包含选定的 TLS 版本、一个服务器生成的随机数(server_random)、加密套件和压缩算法以及数字证书、证书链,证书链包括服务器的公钥证书和任何中间 CA 证书(但不含根 CA 证书)。服务器还可能发送一个 “ServerKeyExchange” 消息(如果需要),包含服务器的公钥或 Diffie-Hellman 参数。

(3)客户端将发送预主密钥

客户端收到ServerHello后。

【1】验证证书

客户端先验证服务器证书的有效性,包括证书链的完整性、证书是否过期、是否被受信任的 CA 签发、证书的域名是否与服务器域名匹配等

【2】生成permaster-secret

客户端使用算法生成premaster-secret,premaster-secret的生成有几种算法,具体使用那种算法,由前面的加密套件确定。

【3】对permaster-secret加密

客户端将premaster-secret使用ServerHello的证书中的公钥对premaster-secret进行加密得到的密文就是预主密钥。客户端将预主密钥发送给服务端

(4)客户端finish
【1】服务器对预主密钥进行解密

服务器使用私钥将预主密钥解密,得到premaster-secret。

【2】双方生成对称加密密钥KEY

双方根据ClientHello和ServerHello以及premaster-secret作为参数,使用相同的算法生成相同的密钥KEY,这样生成的KEY就是安全的。具体使用什么算法,也是由前面的加密套件协商选择的。

【3】发送finish信息

客户端使用刚刚得到的KEY将握手结束信息加密,发送给服务端。

(5)服务器finish

服务端收到客户端的信息后使用KEY解密,并将客户端的握手结束信息使用KEY加密,发送给客户端。握手结束。
在这里插入图片描述
给宝贝们偷来一张流程图惹(除了我还有谁把你们当小孩)
在这里插入图片描述
这位作者写的很不错,推荐大家看一下:
https://segmentfault.com/a/1190000021559557

二、通讯阶段

通讯阶段过程与Http通讯差别不大,唯一的差别是双方发送的数据包都会使用共享密钥KEY进行加密后再发给对方。

三、其他概念

1、信任链

信任链是网络安全和公钥基础设施(PKI)中的一个核心概念,它代表了一种验证和信任传递的机制。信任链确保了数字证书的可信度,允许用户确定一个实体(如网站、个人或组织)的身份是否真实,以及它是否有权执行特定的安全操作。

信任锚点:

信任链始于一个信任锚点,通常是根CA证书。这个证书被认为是可信的,因为它被预先安装在用户的设备或软件中,或者由操作系统或应用程序明确信任。

信任链断裂:

如果证书链中的任何环节出现问题,如证书未被正确签名、证书已过期或证书被吊销,信任链就会断裂,客户端将不信任该证书。

2、证书链

证书链是一系列数字证书的集合,它们彼此相连,形成一个信任路径,从某个特定的证书(通常是终端实体证书)一直追溯到一个根证书。起点:证书链的起点通常是终端实体证书,即直接颁发给个人、组织或服务器的证书。

(1)中间证书:

如果终端实体证书不是由根CA直接签发的,那么证书链中会包含一个或多个中间CA证书。这些中间证书由更高级别的CA签发。

(2)根证书:

证书链的终点是根CA证书,这是一个自签名的证书,作为信任锚点。

(3)信任模型:

证书链基于信任模型,即如果客户端信任根CA证书,那么它也会信任由该根CA或其下属CA签发的所有证书。

(4)验证过程:

在验证证书链时,客户端会逐个验证每个证书的签名,确保每个证书都是由前一个证书有效签发的。

(5)证书吊销检查:

在验证证书链的过程中,客户端可能还会检查证书是否被吊销,通过CRL或OCSP等机制。

(6)证书属性:

证书链中的每个证书都有自己的属性,如有效期、证书持有者信息、签发者信息等。客户端会检查这些属性以确保证书链的有效性。

(7)证书路径长度:

证书链的长度可能会受到某些客户端或应用程序的限制。例如,某些系统可能只允许最多有两到三个证书的链。

(8)交叉认证证书:

在某些情况下,证书链中可能包含交叉认证证书,即由不同CA签发的证书,这些CA之间相互认可对方的证书。

(9)信任决策:

客户端根据证书链中的证书和内置的受信任根证书列表来做出信任决策.

3、CA、根CA证书、中间CA证书

(1)CA:

是颁发证书的机构。

(2)根CA证书:

根CA证书是证书层次结构的顶层证书,它由CA机构自签名。这意味着根CA证书的签发者和主体是同一个实体。
根CA证书是信任锚点,用户或系统的受信任证书存储区中包含根CA证书,表示对该CA的信任。

(3)中间CA证书

中间CA证书是由根CA证书签发的证书,用于进一步扩展证书层次结构。
中间CA证书可以签发更多的中间CA证书或终端实体证书(如服务器证书或客户端证书)。类似于子子孙孙无穷尽也,后面会解释为什么要这样,这样的优点在哪里。

(4)在证书中理解信任链

通过使用中间CA证书,可以形成一个信任链,从终端实体证书开始,通过中间CA证书逐级向上追溯到根CA证书。
信任链确保了终端实体证书的信任可以追溯到一个受信任的根CA。

(5)使用类似派生的方法形成一级一级的证书的优势
    1、区分根证书和中间证书的一个主要原因是为了管理方便。根CA证书的私钥需要非常严格的保护,因为如果根CA私钥泄露,整个信任体系会受到威胁。2、使用中间CA可以分担根CA的证书签发工作,减少对根CA私钥的使用频率,从而降低风险3、中间CA可以针对特定的用途或地区进行配置,提供更灵活的证书管理策略。4、如果一个中间CA的私钥泄露或证书被滥用,影响范围限于该中间CA签发的证书,而不会影响到整个信任体系。5、中间CA可以更灵活地管理证书的撤销,例如,中间CA可以维护自己的CRL或OCSP响应,而不必由根CA来处理。6、不同的中间CA可能遵循不同的法律和政策,这使得它们能够更好地适应不同国家或地区的合规要求。7、某些情况下,中间CA的使用可以解决技术限制,例如,某些系统或应用程序可能对证书链的长度有限制。

4、数字签名

数字签名是数字证书中一种加密机制,用于验证证书的真实性和完整性,并确保证书在传输过程中未被篡改。以下是数字签名在证书中的几个关键点:

1、签发机构(CA)的私钥:

数字签名是由证书的签发机构(CA)使用其私钥创建的。

2、证书内容的哈希值:

首先,证书的内容(如公钥、证书持有者信息、有效期、签发者信息等)会被转换成一个哈希值。这个哈希值是对证书内容的摘要,任何对证书内容的微小改变都会导致哈希值发生显著变化。

3、加密哈希值:

CA使用其私钥对证书内容的哈希值进行加密,生成数字签名。

4、附加到证书:

生成的数字签名会被附加到证书中,通常位于证书的尾部。

5、验证过程:

当需要验证证书的有效性时,接收方会使用CA的公钥来解密数字签名,得到原始的哈希值。同时,接收方也会对证书内容重新计算哈希值。如果两个哈希值相同,说明证书未被篡改,且数字签名验证成功。

6、信任链:

数字签名还确保了信任链的建立。如果证书链中的每个证书都由上一级的CA正确签名,那么整个证书链都是可信的。

5、数字证书

数字证书就是我们上面握手过程中介绍到的服务器发送给客户端的证书实体。
数字证书是一种电子文档,用于在互联网或其他网络通信中验证个人、组织或服务器的身份。它通过使用公钥基础设施(Public Key Infrastructure, PKI)来实现安全的身份验证和数据加密。以下是数字证书的一些关键特点:

1、身份验证:

数字证书用于验证证书持有者的身份,确保网络上的通信双方是他们所声称的实体。

2、公钥和私钥:

数字证书包含了证书持有者的公钥,而私钥则由持有者保密。公钥可以安全地分发给任何人,用于加密数据,而只有对应的私钥才能解密。

3、证书内容:

证书包含了证书持有者的基本信息(如姓名、组织、地理位置等)、公钥、有效期、序列号、签发者信息以及数字签名等。

4、数字签名:

CA使用其私钥对证书内容进行数字签名,以确保证书的真实性和完整性。

5、信任链:

数字证书的验证通常涉及一个信任链,即从证书持有者的证书开始,通过一系列中间CA证书,最终追溯到一个根CA证书。

6、证书吊销:

CA维护一个证书吊销列表(Certificate Revocation List, CRL)或使用在线证书状态协议(Online Certificate Status Protocol, OCSP),以跟踪和吊销不再有效或被泄露的证书。

7、证书类型:

有多种类型的数字证书,包括服务器证书(用于HTTPS网站)、客户端证书(用于用户身份验证)、电子邮件证书(用于安全电子邮件)等。

8、用途:

数字证书广泛应用于SSL/TLS安全通信、电子邮件加密、代码签名、安全访问控制等多种场景。

9、有效期:

数字证书有明确的有效期,有效期结束后需要更新或重新签发。

大家看完这一篇文章如果已经对https有80%理解的宝子,强烈建议大家看我下一篇文章《https握手过程详解》。为什么呢?因为在握手过程,为了大家第一次理解,我对握手过程进行了省略,实际上有的操作并不是在一步内完成的。《https握手过程详解》进一步讲解了https握手的全过程,让大家更进一步理解https全过程,这样在写代码或者进行输出的时候就不会有问题啦,冲冲冲。(如果还没有《https握手过程详解》就证明我还没有写完f发布惹)
在这里插入图片描述
点个赞赞么么哒~~

相关文章:

HTTPS通讯全过程

HTTPS通讯全过程 不得不说,https比http通讯更加复杂惹。在第一次接触https代码的时候,不知道为什么要用用证书,公钥是什么?私钥是什么?他们作用是什么?非对称加密和对称加密是啥?天,…...

建筑物规则化(实现) --- 特征边分组、重构、直角化

规则化建筑物 一、摘 要 建筑物多边形在地图综合中的两类处理模型:化简与直角化。 建筑物矢量数据来源广泛,在数据获取过程中,受GPS精确度、遥感影像分辨率或人为因素的影响,数据往往存在不同程度的误差。其中,图像分割、深度学习…...

pytorch的优化

在pytorch中,tensor是基于numpy与array的。内存共享。 在pythorch中,自定义层是继承nn.Module。将层与模型看成是模块,层与模型堪称模块,两者之间没有明确界限,定义方式与定义模型一样_init_与forward。 1、先定义全…...

React 入门第一天:从Vue到React的初体验

作为一名合格的前端工程师,怎么能只会Vue呢?学习React不仅是一场新技术的探索,更是对前端开发思维的一次重新审视。在这里,我将分享学习React的心得,希望能帮助那些和我一样从Vue转向React的开发者。 1. 为什么选择Re…...

Golang | Leetcode Golang题解之第357题统计各位数字都不同的数字个数

题目&#xff1a; 题解&#xff1a; func countNumbersWithUniqueDigits(n int) int {if n 0 {return 1}if n 1 {return 10}ans, cur : 10, 9for i : 0; i < n-1; i {cur * 9 - ians cur}return ans }...

【Linux】 gdb-调试器初入门(简单版使用)

&#x1f525;系列文章&#xff1a;《Linux入门》 目录 一、背景 二、什么是GDB &#x1f337;定义 &#x1f337;GDB调试工具---提供的帮助 三、GDB的安装教程-Ubuntu &#x1f337;gdb的安装 四、哪类程序可被调试 &#x1f337;程序的发布方式 &#x1f337;Debug版…...

Spring 的事务支持

文章目录 1、Spring如何管理事务2、编程式事务1_基本用法2_创建TransactionTemplate实例3_TransactionTemplate的内部结构4_总结 3、声明式事务1_使用Transactional注解2_事务的传播行为3_配置4_总结 1、Spring如何管理事务 Spring为事务管理提供了一致的编程模板&#xff0c;…...

基于STM32开发的智能家居照明控制系统

目录 引言环境准备工作 硬件准备软件安装与配置系统设计 系统架构硬件连接代码实现 系统初始化传感器数据采集显示与控制逻辑Wi-Fi通信应用场景 家庭智能照明办公室节能照明控制常见问题及解决方案 常见问题解决方案结论 1. 引言 智能家居照明控制系统通过集成光照传感器、继…...

程序员的底层思维~张建飞

前言 ◆ 成人学习的目的不是获取更多的信息量&#xff0c;而是学习更好的思维模型。 ◆ 好的思维能力是可以被复制和迁移的&#xff0c;它应该是普适的&#xff0c;而不应该有行业的界限。 第一部分 基础思维能力 ◆ 因为语言的抽象性&#xff0c;我在团队中会要求大家使用通用…...

美股收涨,半导体板块领涨;苹果iPhone出货预测上调

市场概况 在昨夜的交易中&#xff0c;美股三大股指全线收涨。道琼斯工业平均指数上涨1.39%&#xff0c;纳斯达克综合指数上涨2.34%&#xff0c;标准普尔500指数上涨1.61%。值得注意的是&#xff0c;英伟达股票涨幅近4%&#xff0c;推动了科技股的整体表现。美国十年期国债收益…...

[学习笔记]在不同项目中切换Node.js版本

文章目录 使用 Node Version Manager (NVM)安装 NVM使用 NVM 安装和切换 Node.js 版本为项目指定 Node.js 版本 使用环境变量指定 Node.js安装多个版本的 Node.js设置环境变量验证配置使用 npm 脚本切换 在开发中&#xff0c;可能会遇到不同的Vue项目需要不同的Node.js&#xf…...

SOL项目开发代币DApp的基本要求、模式创建与海外宣发策略

Solana&#xff08;SOL&#xff09;作为一个高性能区块链平台&#xff0c;以其快速的交易速度和低交易成本吸引了大量开发者和投资者。基于Solana开发的去中心化应用程序&#xff08;DApp&#xff09;和代币项目正逐步成为区块链领域的重要组成部分。要成功开发并推广一个SOL项…...

如何在 FastReport .NET 中构建和安装 Postgres 插件

FastReport .NET 是一款全功能的Windows Forms、ASP.NET和MVC报表分析解决方案。 功能非常丰富&#xff0c;功能广泛。今天我们将介绍如何使用报表设计器的 FastReport 插件连接数据库。 FastReport .NET 是适用于.NET Core 3&#xff0c;ASP.NET&#xff0c;MVC和Windows窗体…...

JVM指令重排序

文章目录 什么是指令重排序编译器优化JIT 编译优化处理器优化重排序数据依赖性 硬件层的内存屏障指令重排的代码验证好处减少管道阻塞提高缓存利用率利用并行执行单元性能提升更好地利用硬件资源 问题内存可见性问题编程复杂性增加调试困难 解决方案&#xff1a;Java内存模型&a…...

改造字典关键字:

怎样把第一个关键字的值都 加到所有关键字上&#xff1f; {type: 7, typenum: , typemon: } 我们可以使用字典的keys()方法来获取所有的关键字&#xff0c;然后通过遍历字典的方式将第一个关键字的值添加到其他关键字的名称上。以下是一个示例代码&#xff1a; data {type: …...

Neo4j 图数据库入门

图形数据库存储节点和关系&#xff0c;而不是表或文档。数据的存储方式就像你在白板上勾画想法一样。您的数据存储不受预定义模型的限制&#xff0c;允许以非常灵活的方式考虑和使用它。 一、核心概念&#xff1a;属性图形模型 Neo4j使用属性图数据库模型。图数据结构由节点(离…...

linux 磁盘满了,程序运行失败,如何处理?df -h

场景&#xff1a;紧急呼救&#xff0c;上传图片失败了。我一脸懵&#xff0c;服务器这是又咋地了&#xff0c;别邪乎姐姐&#xff0c;姐姐胆子小啊。 一、寻找问题原因 1、OSS出问题了&#xff1f; 然后我尝试了 IOS 的APP是没问题的&#xff0c;Android提示上传失败&#xf…...

Python编码系列—前端后浪:Python前后端分离开发实战指南

&#x1f31f;&#x1f31f; 欢迎来到我的技术小筑&#xff0c;一个专为技术探索者打造的交流空间。在这里&#xff0c;我们不仅分享代码的智慧&#xff0c;还探讨技术的深度与广度。无论您是资深开发者还是技术新手&#xff0c;这里都有一片属于您的天空。让我们在知识的海洋中…...

Docker学习之路【五】了解数据卷

定义与特性 Docker数据卷是一个特殊目录&#xff0c;&#xff0c;用于实现容器间数据的持久化和共享。数据卷存在于宿主机上&#xff0c;可以被一个或多个容器使用。它独立于容器的生命周期&#xff0c;意味着即使容器被删除&#xff0c;数据卷中的数据也会保留。数据卷的主要…...

matlab如何设置产生的随机数一致

在MATLAB中&#xff0c;确保产生的随机数序列一致&#xff0c;通常需要使用随机数生成器的种子&#xff08;seed&#xff09;。通过设置相同的种子值&#xff0c;可以确保在每次运行代码时&#xff0c;随机数生成器从相同的初始状态开始&#xff0c;从而生成相同的随机数序列。…...

ansible --------拓展

编辑 hosts 配置文件 [rootmo ~]# vim /etc/ansible/hosts # 创建目录 [rootmo ~]# mkdir /etc/ansible/playbook # 编辑配置文件 [rootmo ~]# vim /etc/ansible/playbook/nginx.yml # 执行测试 [rootmo ~]# ansible-playbook /etc/ansible/playbook/nginx.yml roles 修…...

gazebo下使用Fast-planner配置(包含mpc局部规划+控制Gazebo小车以及FastPlanner配置)

源码链接&#xff1a; https://github.com/USE-jx/NMPC_CASADI_CPP?tabreadme-ov-file #这是NMPC的 里面有Fast-Planner&#xff0c;但编译可能缺少东西&#xff0c;所以再放一个Fast-Planner的&#xff0c;可以装装缺少的库 https://github.com/HKUST-Aerial-Robotics/Fast-P…...

Python核心编程--Python要点总结

Python 核心编程包括了一些关键的要点&#xff0c;理解这些要点对于掌握 Python 至关重要。以下是 Python 核心编程的一些要点&#xff1a; 1. 数据类型与数据结构 基本数据类型: int, float, str, bool容器类型: list, tuple, set, dict不可变类型与可变类型: tuple 是不可变…...

【mysql】mysql配置文件之优先级学习

本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》&#xff1a;python零基础入门学习 《python运维脚本》&#xff1a; python运维脚本实践 《shell》&#xff1a;shell学习 《terraform》持续更新中&#xff1a;terraform_Aws学习零基础入门到最佳实战 《k8…...

自然语言处理(NLP)大模型

自然语言处理&#xff08;NLP&#xff09;大模型 自然语言处理&#xff08;NLP&#xff09;领域中的一种重要技术&#xff0c;具有强大的语言理解和生成能力。以下是对NLP大模型的详细介绍&#xff1a; 一、定义与背景 NLP大模型是指通过大规模预训练和自监督学习技术构建的…...

融合创新趋势:Web3时代的跨界融合

随着互联网技术的飞速发展&#xff0c;Web3时代的到来正引领着一场深刻的技术与社会变革。Web3&#xff0c;作为下一代互联网技术的代表&#xff0c;不仅仅是一种技术创新&#xff0c;更是一种跨界融合的趋势。通过去中心化、智能合约和区块链技术的应用&#xff0c;Web3正在重…...

面临新时代的机遇与挑战,联想凌拓将如何破局?

近年来&#xff0c;IT行业的技术进步日新月异&#xff0c;云计算、大数据、人工智能……各种新兴技术犹如雨后春笋般层出不穷&#xff0c;并且正在给千行百业带来全面的变革甚至重塑。 然而以上提到的所有新兴技术&#xff0c;都离不开数据的存储与管理。那么作为中国乃至全球领…...

2024.8.21

作业&#xff1a; 运行1个服务器和2个客户端 实现效果&#xff1a; 服务器和2个客户端互相聊天&#xff0c;服务器和客户端都需要使用select模型去实现 服务器要监视2个客户端是否连接&#xff0c;2个客户端是否发来消息以及服务器自己的标准输入流 客户端要监视服务器是否发来…...

在Ubuntu16.04里安装ROS Kinetic

1.设置apt的source list sudo sh -c echo "deb http://packages.ros.org/ros/ubuntu$(lsb_release -sc) main" > /etc/apt/sources.list.d/ros-latest.list 2.设置gpd keys sudo apt-key adv --keyserver hkp://ha.pool.sks-keyservers.net:80 --recv-key 421C365…...

后端开发刷题 | 合并两个排序的链表

描述 输入两个递增的链表&#xff0c;单个链表的长度为n&#xff0c;合并这两个链表并使新链表中的节点仍然是递增排序的。 数据范围&#xff1a; 0≤n≤1000&#xff0c;−1000≤节点值≤1000 如输入{1,3,5},{2,4,6}时&#xff0c;合并后的链表为{1,2,3,4,5,6}&#xff0c;…...

凡科网站建设如何植入代码/在线企业管理培训课程

托盘显示许多软件都有这个功能&#xff0c;在C#中如何实现呢&#xff0c;下面的方法可以实现托盘显示&#xff0c;不过可能有些复杂。 首先&#xff0c;需要在工具栏拖入NotifyIcon&#xff0c;如图1的那个控件。 图一&#xff1a; 然后&#xff0c;设置NotifyIcon的属性&…...

有哪些网站做外贸的/seo网站推广建站服务商

WPS中如何快速消除硬回车(转)在通常情况下&#xff0c;我们在WPS中用软回车表示换行&#xff0c;用硬回车标记段落结束。但有时&#xff0c;当我们用WPS 打开一个TXT文件或者从网上复制了一些文本后&#xff0c;发现段落中间也是用硬回车来表示换行&#xff0c;这样的文本编辑起…...

wordpress olve/长沙网站制作

为什么80%的码农都做不了架构师&#xff1f;>>> 转载于:https://my.oschina.net/liyangke/blog/2981231...

做微商在哪个网站打广告好/推广软文是什么

「「「动态规划」」」第555章 状压DP(DP(DP(后222题))) 目录&#xff1a; C.涂抹果酱 D.炮兵阵地C.C.C. 例题333 涂抹果酱 LibreLibreLibre OJOJOJ linklinklink 分析&#xff1a; 注意要状压成333进制 因为有333种颜色 fi,jf_{i,j}fi,j​表示第iii行状态为jjj的方案总数 已…...

网站消耗流量/产品线上营销推广方案

作为工程师&#xff0c;我们知道我们应该避免重新发明轮子。 如果可以的话&#xff0c;我们想使用其他人编写的库为我们做一些繁重的工作。 在本文中&#xff0c;我将与您分享一些有关如何利用DLL(或任何其他具有COM类型信息的文件&#xff0c;例如TLB或OCX文件)中的现有库的知…...

哪个网站有手机/策划公司一般怎么收费

很多用户都想将系统升级到Win10&#xff0c;但是却不知道怎么激活Win10正式版的方法&#xff0c;其实不同版本激活正式版Win10的方法秘钥不同&#xff0c;下面99安卓网小编就分享一些激活Win10正式版的方法和秘钥&#xff0c;供大家参考。 目前win10正式版已经发布&#xff0c;…...