- 博客(85)
- 收藏
- 关注
原创 HTTPS协议
数字指纹(数据摘要):其基本原理是利⽤单向散列函数(哈希函数)对信息进⾏运算,⽣成⼀串固定⻓度的数字摘要。数字指纹不是加密机制,但可以⽤来判断数据有没有被窜改。如果有两个非常大的文本文件,如果我们逐字逐句地去核对该文件中的内容,那么付出的精力会相当大。如果我们使用某个Hash算法将文本内容转化为一个长度固定的字符串,那比较起来就简单很多了。该字符串就被称为数据摘要,由于重复性极低,所以也称为数据指纹。常用的算法有MD5、SHA1、SHA256、SHA512等。
2023-10-07 22:58:24 200
原创 HTTP协议
然后,先将目录设置为./wwwroot,此时再拼接传递过来的url,如果url为/则拼接出来的是./wwwroot/,如果是其他的内容比如a/b/c.html,最后得到的是./wwwroot/a/b/c.html。首先,我们在保存服务器代码的目录中创建一个wwroot目录作为http访问的网络根目录,然后在内部创建两个html文件和一个test目录,index.html用于构建网站的首页,404.html用于构建非法访问返回的404页面,test目录下也储存两个构建网站的代码。
2023-10-07 22:47:50 184
原创 网络协议定制
协议本质是一种“约定”,在前面的TCP和UDP网络通信中,读写数据的时候都是按照"字符串"的形式发送和接收的,那我们如果不发送字符串,而是要传送一些结构化的数据怎么办呢?比如说,我们观察QQ或微信的聊天窗口,屏幕上的信息包括头像(url)、时间、昵称、消息等。用户发送的消息虽然大部分是字符串,但是经过用户层(QQ或微信软件)处理后,还需要增加头像,时间,昵称等信息。如果我们将这几个信息看做多个字符串,那么就可以将这多个字符串形成一个结构化的数据,比如下面示例的struct message。
2023-09-24 20:34:58 424
原创 socket套接字——TCP协议
每次这个logmessage函数都把格式化的信息达到屏幕上,告诉我们程序的状态,当然我们也可以把它同时写到文件中,这也是它的一个简单的日志。由于网络的操作步骤多,查找bug困难,所以我们在程序运行到某一个阶段时都告诉我们当前的操作是完成了还是没完成,新建一个log.hpp。启动服务器需要使用accept函数等待客户端的连接,无连接请求会阻塞等待,出现连接请求则会返回一个用于通信的文件描述符。下面的代码包括了所有类型的实现,通过注释不同的字段,就可以实现不同的版本。(现在的为线程池版本)
2023-09-16 18:06:43 2643 4
原创 socket套接字——UDP协议
当bind绑定的IP地址是0.0.0.0的时候,这台计算机就会接收所有网络的请求,也会根据相关的端口处理。是一个输出型参数,使用网路通信就需要传参一个sockaddr_in的结构体,函数会根据发来的数据信息将这个结构体填充,包括获取数据的来源,包括发送方的地址类型,端口号port和IP地址。如果服务器仅绑定本地环回的IP地址,那么当另一台计算机的客户端想要通过公网IP向计算机发出请求时,由于绑定的IP地址与客户端IP地址不一样,服务端就会忽略客户端的请求。然后bind就会执行该结构体的对应操作。
2023-09-13 13:09:07 981
原创 Linux进程信号
在我们不知情的时候,我们就已经在使用信号了,比如在XShell和VSCode中用Ctrl+c就是发送信号终止当前程序的。那就请通过这篇文章,让我们认识并理解这个既熟悉又陌生的朋友。
2023-08-14 19:37:44 823 3
原创 C++异常
在C语言的学习中,当一个C程序出现错误时这个C程序会退出并返回错误码,而在C++中对错误的处理方式不再是对程序的暴力终止,而是以一种叫抛异常的方式进行,本文章就是抛异常的详细解释。
2023-07-06 23:23:39 1093 3
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人