自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Hanani_Jia的博客

计算机科学与技术专业萌新

  • 博客(31)
  • 收藏
  • 关注

原创 简单HTTP服务器实现

   我们这里实现一个简单的HTTP服务器,无论浏览器向我们请求什么数据,我们都返回一个hello world  //实现最简单的http服务端程序//返回hello world//http是应用协议,在传输层使用的是tcp协议所以我们的程序本质上是tcp服务器//我们http指定监听10000端口,所以在请求访问的时候也要手动指定否则默认80端口#include<std...

2018-10-30 20:46:03 2168

原创 自定协议实现网络计算器

  这里我们的自定执行协议和TCP、UDP、IP这些协议不同,我们自定制的协议是应用层的协议。是我们这两个应用所应用的一种特殊传输和接受数据的方式,这里我们是通过结构体来存储数据的,也可以定义一个字符串,当我们的数据发送过去之后,只有我对应的服务端或者客户端明白我这里是在干什么,如何把这一大块数据进行划分。//这是一个通过自定制协议来实现的网络计算器//客户端传输过来的数据是提前协定好的...

2018-10-29 16:34:06 497

原创 剑指offer--包含mini函数的栈

题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。 这个题目的意思就是我们的函数里边有一个min函数,当我们调用这个函数的时候,不需要去遍历我们的栈,直接调用这个函数就可以返回我们栈里边的最小元素。  那我们就一步一步的来分析一下这个问题。第一步:设置一个min变量      这是很好理解的,我们现在定义一个变量,in...

2018-10-29 14:21:03 470

原创 多线程版本TCP聊天程序服务端

   这是一个通过多线程来实现可以接受多个客户端的TCP聊天程序。  //这是一个实现多线程TCP的聊天程序服务端#include<stdio.h>#include<stdlib.h>#include<string.h>#include<errno.h>#include<unistd.h>#include<s...

2018-10-28 21:01:43 747

原创 多进程版本TCP聊天程序服务端

  我们上次写了利用TCP协议来实现的简单的网络聊天程序,我们实现的是一对一的聊天, 但是如果我们通过上次的程序来实现多对一呢?   我们可以看出来其中一个客户端可以和服务端正常交流,但是另一个客户端是链接不上服务端的,即使原来的客户端退出了,新的客户端也是链接不上的。因为我们的程序当链接成功之后会通过while循环来一直调用read函数,并没有再去调用我们的accept函数,所以...

2018-10-28 16:32:07 545

原创 TCP实现简单聊天程序

  上次我们通过UDP来实现了简单的聊天程序,这次我们用TCP协议来实现,TCP和UDP不同的是TCP需要创建连接。//这是一个通过TCP协议来实现聊天的程序//1.创建socket//2.为socket绑定地址//3.向服务端发送链接请求//4.发送数据//5.接受数据//6.断开连接//#include<stdio.h>#include<stdlib...

2018-10-27 19:52:43 1796

原创 UDP协议实现聊天小程序

  今天我们用之前讲解过的UDP协议来写一个最基础,最简单的网络聊天程序。//我们通过udp协议来实现一个简单的网络聊天程序//这是客户端的实现//过程:// 1.创建套接字// 2.绑定地址信息// 3.向服务端发送数据// 4.接受服务端发送的数据// 5.关闭socket#include<stdio.h>#include&l...

2018-10-24 16:25:51 1757

原创 UDP和TCP

  之前我们对TCP协议进行了一个简单的介绍,TCP(传输控制协议)是面向链接的、可靠的、面向字节流的传输层通信协议。今天我们主要介绍和他在同一层次上的UDP协议,并且对比一下他们两个有什么区别。相比起来TCP,UDP算是恰恰相反的一个协议,他是无连接、不可靠、面向数据报的。   UDP和TCP、IP一样他也拥有自己的头部,不过他的头部信息十分的简单,UDP的头部包含源端口,目标端口,...

2018-10-23 20:50:54 282

原创 OSI参考模型

   今天我们主要来讲解一下网络里边的OSI参考模型。   在经过最初商议之后,制定了一个网络体系结构OSI模型,OSI的全称为Open System Interconnection 开放系统互联,在这个模型中将通信协议中必要的功能划分成了七层,通过将网络分层,然后使得那些比较复杂的网络协议变的更加的简单化。   在这个模型中每一层都接受由他的下一层为他提供的服务,并且他也为自己的上一层提...

2018-10-22 15:38:13 1222

原创 LeetCode--所有可能的路径

class Solution {public:vector<vector<int>> allPathsSourceTarget(vector<vector<int>>& graph) {vector<vector<int>> ret;int num = graph.size() - 1;vec...

2018-10-22 10:21:26 1208

原创 C++服务器十三 C++深入学习

   我们这里是用C++这门语言来编写我们的服务器,这里我们在前期,先介绍一下C++这门语言里的一些语法。  我们用到的编译器是g++或者clang。在ubuntu下可以用sudo apt-get install g++来安装。还要安装make和cmake。   之后我们就开始介绍我们C++这门语言。C++是在C的基础上扩展的,所以和C语言区别并不是很大。我们这里就直接开始介绍。   ...

2018-10-21 23:23:36 538

原创 TCP协议讲解二

   慢慢的到了夏天,天气越来越潮湿了,西安虽然很干旱,但是在西安到北京的路上阴雨天气越来越多,大华抱怨到:最近的纸飞机越来越脆弱了,经常就给丢了,烦的一批。我们得想想办法解决啊。   小胖说,要不这样我们在这一路多安插一些人手,让我们的纸飞机一直在我们的视野中,给他们站好岗。   大华就急了:哪来那么多人,给你站岗去,再说了,这么远的路,我一千米一个岗,我耗费多大的人力物力。   小...

2018-10-21 15:44:46 234

原创 TCP协议讲解一

我想给在北京上学的同学发一份包裹,所以我就去了菜鸟驿站找到了大华。我跟他说:“大华我要往北京的同学那里发一份包裹你帮帮我呗”。大华说:“好,可是北京那边有这么多通道你准备走哪一个通道?”我:“那就走80这个通道吧(TCP协议默认端口80)”我跟着大华来到了菜鸟驿站的后边,大华说不急,你先等我跟北京的小胖建立一个连接再说。大华拿出一张纸写了“发货地址:西安市233号,收货地址:北京8...

2018-10-21 14:13:20 605

原创 LeetCode--比特位计数

对于基础的算法很简单,很容易就能写出来。class Solution {public: vector<int> countBits(int num) { int n = num; vector<int> ret; for (int i = 0; i <= num; i++) { ret.push_back(countbit(i));...

2018-10-21 13:44:36 544

原创 Linux讲解 生产者消费者模型

     我们上次通过代码实现了进程间的互斥操作,解决了wps和word同时都去操作我们的队列的话怎么解决这个问题,但是打印机这边又出现了问题,因为我们的进程队列是有限制的,正常来说打印机就在我们的槽里获取数据打印就可以了,但是如果说我们槽满了,这时候应该怎么办?Wps和word是不是都要等着队列空了再往里边放,再或者如果说队列全部空了,打印机也要等着其他进程往里边放东西,所以wps、word和打...

2018-10-18 20:29:18 531 2

原创 LeetCode--子集(Subsets)

   给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。  示例:输入: nums = [1,2,3]输出:[  [3],  [1],  [2],  [1,2,3],  [1,3],  [2,3],  [1,2],  []]class Solution {public:vect...

2018-10-18 19:25:03 418

原创 LeetCode--子域名访问次数

   一个网站域名,如"discuss.leetcode.com",包含了多个子域名。作为顶级域名,常用的有"com",下一级则有"leetcode.com",最低的一级为"discuss.leetcode.com"。当我们访问域名"discuss.leetcode.com"时,也同时访问了其父域名"leetcode.com"以及顶级域名 "com"。  给定一个带

2018-10-16 15:03:37 298

原创 HTTP如何实现长链接

   长链接确实在某些时候有很多的优点,要比我们的短链接方便一些,但是我们都知道在学习HTTP的时候就说过这是一个无状态、无链接的一个协议,那他是怎么来实现我们的长链接的?   如果要想弄清楚怎么实现长链接的就要清楚,那些情况会把我们的长链接断开。 长链接所在进程被杀死,这是很容易理解的一种情况,进程杀死自然就断了。 NAT超时,这里我们介绍一下NAT,我们都知道在IPV4下,...

2018-10-15 23:38:14 4763

原创 HTTP长连接短连接

   我们在介绍HTTP各版本区别的时候说过,HTTP1.1和1.0的区别就是1.1默认情况就是长链接的而在1.0版本里就需要通过头部Connection: Keep-alive来说明链接情况,如果不说明可能就是短连接了。   那到底什么是长链接什么是短连接,这两个又有什么区别呢?   HTTP链接是在应用层的协议,他是建立在传输层协议TCP协议和网络层协议IP协议上,IP协议主要解决了网...

2018-10-15 15:51:47 2845

原创 Linux讲解 进程线程

  我们之前在Linux中引入了进程的概念,今天我们就在仔细的分析一下什么是进程,什么是线程,进程和线程之间有什么关系。  现在有两个程序一个是小红,一个是小蓝。  在计算机发展初期的时候,CPU是一个很稀缺的资源,他们两个必须轮流使用,只有小红执行结束之后,让出CPU,小蓝才能从头开始运行。人们把这种方式叫做批处理。   慢慢的,随着计算机的不断发展,CPU的处理能力越来越快了,...

2018-10-15 15:07:47 391

原创 cookie和session的区别

   今天我们要介绍的是cookie和session,为什么要有这两个机制?HTTP是一个无连接的协议,也就是说他把每一次的链接都当成新的链接,我不知道你上次来过,你在上一个界面登录了,我这个界面是不知道的。所以为了分辨这个链接是谁发起的,就需要我们自己来解决问题。而session和cookie就是来解决这个问题的。   简单的来说cookie是客户端保持状态的方案,而session机制则采用...

2018-10-14 21:56:15 321

原创 GET和POST的区别

  HTTP在客户端请求服务器的时候,大多数用到了两种方法GET和POST两种方式。简单来说GET是从指定的资源请求数据,而POST来说是向指定的资源去提交要被处理的数据。 GET使用URL或cookie进行传参,而POST请求的时候数据在BODY中     GET的URL长度会有一定的限制,但是POST里边没有。但是实际上在协议的规定中对于HTTP的头和HTTP的实体部分...

2018-10-13 22:24:44 416

原创 HTTP和HTTPS的区别

   我们介绍了很多关于HTTP的东西,但是现在访问网页的时候,大多数网页都是用的HTTPS协议,HTTP超文本协议被用在客户端和服务器之间传输信息,但是HTTP协议是以明文的当时来发送内容,并不提供任何加密方式。如果有攻击者拦截了浏览器和服务器之间发送的数据,就能读懂其中的数据信息,这样就就导致HTTP很不安全,所以HTTP协议就不适合传输敏感信息。为了解决这个问题就有了能够保护我们数据安全传输...

2018-10-13 15:46:58 385

原创 在浏览器上请求一个URL的全部过程

  当我们在浏览器中输入一个网址的时候主要经过了六个步骤来最终把网页完整的展现给我们。 第一步要进行的就是域名解析 我们在浏览器中输入的是一个www.baidu.com,浏览器首先要做去获得我们想访问网页的IP地址,浏览器会发送一个UDP的包给DNS域名解析服务器。DNS就会返回给我们百度的IP地址,通常来说浏览器会把访问过的网站的IP保存下来,这样下次访问的时候就会快很多,能够节省很多...

2018-10-13 10:29:34 4260

原创 LeetCode--N叉树的前序遍历

 之前写过二叉树的遍历,当时认为递归是很简单的,但是之前忽略了一个问题,当时在遍历的时候都是直接输出,并没有说将结果存起来,但是如果在线编程的话,是一定会让结果保存在一个数据结构中的。所以这里在最初的时候即使是二叉树也不能像之前写的那样直接输出,如果在函数首部定义一个vector每次递归都会重新创建,里边的数据保存不下来,我也想过定义一个全局变量,但是这样也不妥,这样的话返回值返回什么。...

2018-10-12 15:13:02 648

原创 LeetCode--N叉树的最大深度

  最近在刷领扣的时候遇到了N叉树,之前都是在写二叉树的基本操作,写N叉树的时候难免有些乱,这里简单的总结一下。  我们之前在写二叉树的时候通过递归来实现求最大的深度,是很简单的。其实N叉树也并不难只是把二叉树的思想搬过来就可。我们在写二叉树的时候就是深度不就是我孩子里边深度最深的那个数字加上1就是我当前的深度,不断一层一层的去递归。class Node {public:in...

2018-10-12 15:00:36 1002

原创 HTTP状态码

  我们在介绍响应报头的时候提到了HTTP的状态码的概念,状态码跟随着响应表报头一同返回回来,今天我们主要来讲一下状态码有哪些各自的含义是什么?  状态码就是告诉我们服务器响应的状态,通过它我们能明白我们的状态码由三个十进制的数字组成,第一个十进制数字定义了状态码的类型,后边两个数字没有分类的作用。HTTP状态码分为五类一.1XX:表示请求已经接受,需要请求者继续执行操作二.2XX:代...

2018-10-12 12:48:55 503

原创 HTTP报头

  我们上次在说HTTP版本区别的时候说了,在HTTP1.0的时候加入了报头,报头中包含了很多信息。报头分为两种:一种是请求报头一种是响应报头,自然就是一个是请求的时候发送的一个是响应的时候发送的。 请求报头由四部分构成请求行、请求头、空格和请求数据 这里我们看当你访问百度的时候的请求报头GET / HTTP/1.1 Host: www.baidu.com Conne...

2018-10-11 21:01:25 8325

原创 HTTP各版本区别

 HTTP协议全称HyperText Transfer Protocol,中文名超文本传输协议。是互联网上应用最为广泛的一种网络协议。HTTP是基于TCP/IP协议的应用层协议,不涉及数据包的传输,主要是规定了客户端和服务器之间的通信格式。默认使用80端口。现在HTTP已经演化出了很多个版本。  HTTP 0.9是最早发现的一个版本,在1991年发布,但是现在已经过时了,因为它只允许客户端发送...

2018-10-10 16:43:00 4619

原创 Linux讲解 进程间通信 信号量的互斥

  我们在介绍进程间间通信的时候说到了共享内存,共享内存有一个特点就是共享内存并没有提供同步和互斥机制的,是需要我们自己来实现共享内存访问的同步和互斥。   首先要明白什么是同步与互斥。互斥就是:进程对临界资源的同一时间的唯一访问性。同步就是:进程对临界资源的顺序访问关系。通俗来说互斥就是一个公共资源同一时刻只能被一个进程或线程使用,多个进程或线程不能同时使用公共资源。而同步就是:两个或两个以...

2018-10-08 20:31:07 1219

原创 剑指offer--翻转单词顺序列

题目描述牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么? 这里要注意的是...

2018-10-08 17:18:00 349

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除