自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(77)
  • 收藏
  • 关注

转载 shell学习记录--运算符总结

shell运算符种类算数运算符关系运算符布尔运算符字符串运算符文件测试运算符文章目录expr命令算数运算符关系运算符布尔运算符逻辑运算符字符串运算符文件测试运算符expr命令expr是一个表达式计算工具,可以完成表达式的求值操作num=`expr 2 \* 2`echo $num表达式与运算符之间有空格表达式需要被包括在 反引号``中算数运算符运算符说明示例+加法expr $a + $b-减法expr $a - $b*

2021-06-09 21:46:14 373

原创 shell学习:变量/字符串/数组

shell即是一种命令语言,也是一种程序设计语言shell是一个应用程序并提供了一个界面,通过这个界面用户可以访问操作系统内核的服务文章目录变量变量类型定义变量如何使用变量设置只读变量删除变量shell字符串拼接字符串关于字符串的常用方法获取字符拆长度截取字符串查找字符串shell数组定义数组读取数组获取数组元素个数获取数组长度获取数组单个元素长度删除数组数组截取关联数组变量变量类型shell中存在三种变量类型局部变量 局部变量在脚本或命令中定义,仅在当前shell实例中有效,其他shell启

2021-06-09 20:58:49 677

原创 python--文件操作

打开文件的四种方式“r”- 读取 - 默认值。打开一个文件进行读取,如果文件不存在则报错“a” - Append - 打开一个文件进行追加,如果文件不存在则创建该文件“w” - 写入 - 打开一个文件进行写入,如果文件不存在则创建该文件“x” - Create - 创建指定的文件,如果文件存在则返回错误指定文件的处理方式“t”- 文本 - 默认值。文本模式“b” - 二进制 - 二进制模式(例如图像)文章目录创建文件打开文件读取文件内容只读取文件的部分内容如何只读取一行循环遍历文件内

2021-06-03 16:24:55 423

转载 Linux下文件的X权限

Linux的文件和目录的权限,只有RWX三种r(Read,读取):对文件而言,具有读取文件内容的权限;对目录来说,具有浏览目录的权限w(Write,写入):对文件而言,具有新增,修改,删除文件内容的权限;对目录来说,具有新建,删除,修改,移动目录内文件的权限x(eXecute,执行):对文件而言,具有执行文件的权限;对目录了来说该用户具有进入目录的权限目录的只读访问不允许使用cd进入目录,必须要有执行的权限才能进入只有执行权限只能进入目录,不能看到目录下的内容,要想看到目录下的文件名和目录名,需

2021-06-03 15:21:21 2687

原创 python学习记录

文章目录函数定义函数如何接收任意参数关键字参数如何接收任意关键字参数默认参数值将列表作为参数传递lambda函数数组类和对象如何删除对象属性如何删除对象出现空类怎么办继承添加__init__()函数添加属性迭代器创建迭代器如何停止迭代全局关键字日期类型创建日期对象mathmin() / max()abs()pow()sqrt()ceil() / floor()JSON将json字符串转换为python对象将python对象转换为json字符串正则表达式Match对象函数在python文档中,函数通常被称

2021-06-02 22:53:29 113

原创 python学习记录:元组,集合,字典使用方法及其它注意点

文章目录Tupls(元组)类型特点tuple()构造函数如何更换元组值(增加/删除/修改)打包/解包是什么如何遍历索引元组操作count()方法与index()方法Sets(集合)构造类型特点如何添加如何删除保留重复项不保存重复项清空SetsSet内置方法Dictionaries(字典)类型特点如何访问字典中的值获取字典中所有key获取字典中的值获取键值对列表更改指定项(增/删/改)如何修改如何增加如何删除复制字典嵌套字典其它点缩进if 与 elif 与 else嵌套ifand关键字or关键字passels

2021-06-02 14:20:40 880

原创 计算机网络基础之HTTP详解

文章目录HTTP协议简介HTTP协议特点HTTP协议格式请求方法GET与POST的区别urlHTTP协议版本响应状态码典型的头部信息**Cookie与Session的区别**空行HTTP协议简介HTTP协议是超文本传输协议(Hypertext Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。是基于TCP/IP的关于数据如何在万维网上进行通信的协议HTTP协议特点HTTP协议是一种无状态

2021-02-24 16:37:28 397 1

原创 TCP/UDP网络编程套接字

文章目录UDP通信UDP编程接口介绍TCP通信TCP编程接口介绍socket接口介绍:服务端与客户端的步骤不同的是客户端第三步为发送数据第四步为接收数据五元组:源端ip,源端端口,对端ip,对端端口,协议一条五元组可以标识一条通信其中对端ip和对端端口是为了确定网络中的内一台主机和进程,网络中的数据通过对端ip发送给目标主机之后,再通过端口号确定需要发送到的进程UDP通信udp通信特点:无连接,不可靠,面向数据报服务端:1.创建套接字:在内核中创建socket结构体,为了与网卡建立联系,

2021-02-06 15:12:05 371

原创 Linux常用指令

文章目录目录相关指令lspwdcdmkdirrmdirrmcpmv文件相关指令touchcatmorelessheadtail文件的压缩/解压缩指令tar文件的匹配查找指令findgrep其它指令mansuchmodchownchgrpumask目录相关指令ls语法:ls[选项][目录或文件]功能:对于目录,列出该目录下的所有子目录与文件对于文件,列出文件名和其它信息常用选项:ls -a列出目录下所有文件,包括以" . "开头的隐藏文件ls -r对目录反向排序

2021-02-06 14:48:09 483

原创 strlen与sizeof

文章目录strlensizeofstrlen与sizeof的区别strlenstrlen所作的是一个计数器的工作,它从内存的某个位置(可以是字符串开头,中间某个位置,甚至是某个不确定的内存区域)开始扫描,直到碰到第一个字符串结束符’\0’为止,然后返回计数器值(长度不包含’\0’)头文件:string.h或cstring格式:strlen (字符指针表达式)功能:计算给定字符串的(unsigned int型)长度,不包括’\0’在内说明:返回s的长度,不包括结束符NULLsizeof在

2021-02-06 13:58:01 224

原创 动态内存分配算法:首次适应算法,循环首次适应算法,最坏适应算法,最佳适应算法实现

动态分区分配是根据进程的实际需要,动态地址为之分配内存空间,在分配时按照一定的分配算法,从空闲分区表或空闲分区链中选出一分区分配给该作业1.首次适应算法(FF):将所有空闲分区按照地址递增的次序链接,在申请内存分配时,从链首开始查找,将满足需求的第一个空闲分区分配给作业。void FirstFit(){ cout << "***********首次适应算法***********" << endl; initial(); int i, j; for (i = 0;

2021-02-06 12:34:44 20933 10

原创 断点续传原理分析

文章目录概述断点续传为什么需要断点续传?断点续传原理ETagContent-RangeRangeIf-Range概述断点续传:在下载或上传时,将下载或上传任务(一个文件或一个压缩包)人为的划分为几个部分,每一个部分采用一个线程进行上传或下载,如果碰到网络故障,可以从已经上传或下载的部分开始继续上传下载未完成的部分,而没有必要从头开始上传下载。用户可以节省时间,提高速度。断点续传为什么需要断点续传?文件上传过程使用者在前端选择好要上传的文件,然后后端处理文件,先将文件加载到运行内存中,然后系统调用

2021-02-06 12:01:33 1849

转载 公共IP寻址过程 与 局域网 IP的转换

封装与解封装封装所谓封装是指在发送方发生的自上而下的过程 —— 在每一层为应用数据添加上特定的头部 / 尾部信息( PDU , Protocol Data Unit ,协议数据单元) Application (应用程序) →segment (数据段) →packet (数据包) →frame (数据帧) →bit (比特,二进制位)解封装所谓解封装是指在接收方发生的自下而上的过程 —— 逐层的去掉头部以及尾部信息 由于今天我们只讨论数据传输过程,所以只牵涉到数据的四层以下封装。假设现在 A 要向

2021-02-02 16:10:38 613

原创 数值的整数次方

实现函数double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。示例 1:输入: 2.00000, 10输出: 1024.00000示例 2:输入: 2.10000, 3输出: 9.26100考虑各种情况,如当指数n为负数时,需要将x变为倒数然后将指数变为正数,负数幂和正数幂相同,因为除以一个数就相当于乘这个数的倒数。x^n 可以分解成若干个 x^i 的乘积class Solution

2021-02-02 15:04:37 142

原创 剪绳子||

给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]…k[m - 1] 。请问 k[0]k[1]…*k[m - 1] 可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。示例 1:输入: 2输出: 1解释: 2 = 1 + 1, 1 × 1 =

2021-02-02 14:57:48 114

原创 剪绳子

给你一根长度为 n 的绳子,请把绳子剪成整数长度的 m 段(m、n都是整数,n>1并且m>1),每段绳子的长度记为 k[0],k[1]…k[m-1] 。请问 k[0]k[1]…*k[m-1] 可能的最大乘积是多少?例如,当绳子的长度是8时,我们把它剪成长度分别为2、3、3的三段,此时得到的最大乘积是18。示例 1:输入: 2输出: 1解释: 2 = 1 + 1, 1 × 1 = 1动态规划(常规解决方法),将剪一段长度为n的绳子分解为长度更小的子问题,避免子问题重复计算,我们将每

2021-02-02 14:55:15 139

原创 二进制中1的个数

请实现一个函数,输入一个整数(以二进制串形式),输出该数二进制表示中 1 的个数。例如,把 9 表示成二进制是 1001,有 2 位是 1。因此,如果输入 9,则该函数输出 2。示例 1:输入:00000000000000000000000000001011输出:3解释:输入的二进制串 00000000000000000000000000001011 中,共有三位为 ‘1’。首先和1相与,可以判断出末位数是否为1,然后把1左移一位得到2,再与其相与,重复计算,可以得到二进制中1的个数,但是这种方

2021-02-02 14:45:38 134

原创 机器人的运动范围

地上有一个m行n列的方格,从坐标 [0,0] 到坐标 [m-1,n-1] 。一个机器人从坐标 [0, 0] 的格子开始移动,它每次可以向左、右、上、下移动一格(不能移动到方格外),也不能进入行坐标和列坐标的数位之和大于k的格子。例如,当k为18时,机器人能够进入方格 [35, 37] ,因为3+5+3+7=18。但它不能进入方格 [35, 38],因为3+5+3+8=19。请问该机器人能够到达多少个格子?示例 1:输入:m = 2, n = 3, k = 1输出:3和上几篇的内容相似,都是采

2021-02-01 18:30:03 129

原创 单词搜索

给定一个二维网格和一个单词,找出该单词是否存在于网格中。单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。示例:board =[[‘A’,‘B’,‘C’,‘E’],[‘S’,‘F’,‘C’,‘S’],[‘A’,‘D’,‘E’,‘E’]]给定 word = “ABCCED”, 返回 true给定 word = “SEE”, 返回 true给定 word = “ABCB”, 返回 false注

2021-02-01 17:29:57 164 1

原创 矩阵中的路径问题

请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左、右、上、下移动一格。如果一条路径经过了矩阵的某一格,那么该路径不能再次进入该格子。例如,在下面的3×4的矩阵中包含一条字符串“bfce”的路径(路径中的字母用加粗标出)。[[“a”,“b”,“c”,“e”],[“s”,“f”,“c”,“s”],[“a”,“d”,“e”,“e”]]但矩阵中不包含字符串“abfb”的路径,因为字符串的第一个字符b占据了矩阵中的第一行

2021-02-01 17:27:45 440 1

原创 旋转数组的最小数字

把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的数组的一个旋转,输出旋转数组的最小元素。例如,数组 [3,4,5,1,2] 为 [1,2,3,4,5] 的一个旋转,该数组的最小值为1。示例 1:输入:[3,4,5,1,2]输出:1第一眼看到题的想法是从头遍历一遍寻找,但是这种的时间复杂度为O(n),所以利用旋转数组特性和二分查找的思想来解决通过观察,旋转数组可以分为两个排序子数组,前面数组元素大于后面数组元素,且最小元素处在分界位置,所以利用二分查找法,双指针

2021-02-01 17:17:34 125

原创 青蛙跳台阶

一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶。求该青蛙跳上一个 n 级的台阶总共有多少种跳法。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。与斐波那契数列一个思想,避免重复计算,提高效率,自下而上,注意最后取模即可递归(会超时)class Solution {public: int fib(int n) { if (n == 0) return 0; if (n == 1) return 1; return

2021-02-01 17:04:29 121

原创 斐波那契数列

写一个函数,输入 n ,求斐波那契(Fibonacci)数列的第 n 项(即 F(N))。斐波那契数列的定义如下:F(0) = 0, F(1) = 1F(N) = F(N - 1) + F(N - 2), 其中 N > 1.斐波那契数列由 0 和 1 开始,之后的斐波那契数就是由之前的两数相加而得出。答案需要取模 1e9+7(1000000007),如计算初始结果为:1000000008,请返回 1。注意:一定记得取模1e9+7(1000000007)!!!在使用递归解决问题时,要记

2021-02-01 17:01:13 258

原创 用两个栈实现队列,和使用队列实现栈

用两个栈实现一个队列。队列的声明如下,请实现它的两个函数 appendTail 和 deleteHead ,分别完成在队列尾部插入整数和在队列头部删除整数的功能。(若队列中没有元素,deleteHead 操作返回 -1 )示例 1:输入:[“CQueue”,“appendTail”,“deleteHead”,“deleteHead”][[],[3],[],[]]输出:[null,null,3,-1]注意:根据栈和队列的性质模拟即可栈:先进后出,队列:先进先出class CQueue {

2021-02-01 16:47:01 195

转载 C++中vector作为参数的三种传参方式(传值 && 传引用 && 传指针)

c++中常用的vector容器作为参数时,有三种传参方式,分别如下:function1(vector vec),传值function2(vector &vec),传引用function3(vector *vec),传指针注意,三种方式分别有对应的const形式,不在此讨论。三种方式对应的调用形式分别为:function1(vec),传入值function2(vec),传入引用function3(&vec),传入地址三种方式的效果分别为:会发生拷贝构造不会发生拷贝构造不

2021-02-01 16:09:54 5405 3

原创 重建二叉树

输入某二叉树的前序遍历和中序遍历的结果,请重建该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树:3/ 9 20/ 15 7所给二叉树结构////Definition for a binary tree node. //struct TreeNode { // int val; // TreeNode *l

2021-01-31 16:14:42 119

原创 从尾到头打印链表

输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。示例 1:输入:head = [1,3,2]输出:[2,3,1]所给链表结构/*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val(x), next(NULL) {}* };*/注意:从尾到头打印,因为这里的链表是单向链表,所以

2021-01-31 16:06:25 109

原创 替换空格

请实现一个函数,把字符串 s 中的每个空格替换成"%20"。示例 1:输入:s = “We are happy.”输出:"We%20are%20happy.注意:从后向前插入的思想class Solution {public: string replaceSpace(string s) { int count = 0; int m = 0; while (s[m] != '\0') { if (s[m] == ' ') count++; m++; }

2021-01-31 16:01:18 114

原创 二维数组中的查找

在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个高效的函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。示例:现有矩阵 matrix 如下:[[1, 4, 7, 11, 15],[2, 5, 8, 12, 19],[3, 6, 9, 16, 22],[10, 13, 14, 17, 24],[18, 21, 23, 26, 30]]注意:不要以左上角或者右下角的位置开始,如1是左上

2021-01-31 15:58:53 134

原创 数组中重复数字

在一个长度为 n 的数组 nums 里的所有数字都在 0~n - 1 的范围内。数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次。请找出数组中任意一个重复的数字。示例 :输入:[2, 3, 1, 0, 2, 5, 3]输出:2 或 3注意:数组中的数字都在0~n-1中,如果不存在重复数字,那么数组排序后数字k将出现再下标k的位置。所以有些位置存在多个数字,有些位置可能没有数字共三种解题方式,每种时间复杂度和空间复杂度均不同先排序,再查找时间复杂度O(n*

2021-01-31 15:51:04 194

原创 关于堆栈问题的一些总结

文章目录堆栈溢出为什么栈向下生长,堆向上增长?堆栈区别堆栈溢出栈溢出:创建进程时,会分配一个2M的栈空间,当递归函数调用过多时就会导致栈溢出堆溢出:实际上与栈溢出同理(都是因为向一个固定大小的空间中,分配了过多的数据),因为操作系统给每个进程分配的最大堆的空间就是4G,当超出这个上限时就会发生堆溢出(比如说创建一个过大的数组)如何解决递归函数引起的栈溢出?使用尾递归,尾递归就是return时调用函数本身T func(num_1,num_2){ if(num_1 == 2)

2021-01-29 19:07:44 1141 2

原创 进程与线程间的区别

1.(根本区别)进程是系统分配资源的基本单位,线程是cpu调度执行的基本单位2.资源开销:不同进程之间会有独立的代码和数据空间,切换进程开销较大,而线程是轻量级的进程,同一线程组下的线程共享代码和数据空间,但是线程之间有着各自独立的运行栈与程序计数器,优先级,切换线程开销小3.内存分配:进程之间有着独立的地址空间和资源,同一进程组中的线程共享同组的地址空间与资源4.影响关系:一个进程崩溃后不会影响其它进程,但是一个线程崩溃后会导致整个进程崩溃5.执行过程:进程有着独立的程序入口,执行序列,程序出口.

2021-01-29 18:42:05 241 1

原创 多路转接IO之select,poll,epoll

文章目录selectpollepoll什么是多路转接IO用来实现大量描述符的就绪事件监控,可以在程序中能够只针对就绪的描述符进行IO操作,提高效率,避免对没有就绪的描述符进行操作导致的阻塞,避免对大量没有就绪的描述符进行操作带来的效率降低IO就绪事件:IO事件的就绪(可读/可写/异常)可读事件:一个描述符当前是否有数据可读,可写事件:一个描述符当前是否可以写入数据(一般对于socket来说)异常事件:一个描述符是否发生了某些异常(比如连接断开,挂起之类)selectselect系统调用是

2021-01-29 18:09:23 249 1

原创 IO模型之阻塞IO,非阻塞IO,信号驱动IO,异步IO,多路转接IO

阻塞IO为了完成IO操作,发起调用,调用结果返回之前则一直等待,直到完成,这个过程中为阻塞状态在等待的过程中,什么都不做,直到条件具备才进行下一步操作非阻塞IO为了完成IO操作,发起调用,若不具备完成条件,则立即报错返回(通常需要循环操作)当进程等待内核数据时,进程不断询问内核是否完成,直到内核数据准备完成,这个过程是一个轮询过程非阻塞IO代码操作#include<unistd.h>#include<fcntl>int fcntl(int fd,int cmd,..

2021-01-29 17:24:35 353

原创 scanf是怎么从缓冲区读取数据的?

标准库I/O提供了三种缓冲类型:全缓冲,行缓冲,无缓冲标准IO缓冲类型何处使用全缓冲当划出的被填满或者数据读取至末尾时,执行IO操作磁盘文件的读写行缓冲当输入输出过程遇到换行符“\n” 或者分配的缓冲区已满,则执行IO操作涉及终端的读写操作如sdin/stout无缓冲当有数据产生时,立刻由相应设备进行处理一般stderr使用无缓冲,不代表系统不缓存标准输入缓冲区stdin使用行缓冲的方式存储输入(接收写入设备的数据存到缓冲区中),用户存入的数据先存在临时

2021-01-29 15:45:53 1295

原创 静态链接和动态链接是什么?

程序的运行过程分为两个阶段,分别为编译阶段和链接阶段,而编译阶段又分为三部分:预编译,编译,汇编预编译(生成.i文件)展开头文件,宏替换,条件编译,去掉注释编译(生成.s文件)检查错误,语法分析,生成汇编代码汇编(生成.0文件)将汇编代码转换为二进制链接(生成.exe文件)合并段表,将目标文件链接到一起接下来看几个概念目标文件:在Linux系统下,由编译器将源代码编译后生成的文件叫做目标文件(Linux下的 .o 文件),所以目标文件指的就是源代码编译

2021-01-29 15:27:52 1843

原创 输入一个url发生了什么?

文章目录DNSDNS解析流程在浏览器中输入url发生了什么?DNS什么是DNS?DNS:域名系统,存储IP地址与域名之间的映射关系,提供域名解析,通过域名获取服务器的IP地址的服务域名:服务器地址的别名,但是最终通过域名访问服务器的时候还是进行解析IP地址访问服务器域名服务器:记录所有服务地址与域名的映射关系,采用分布式存储,分摊访问压力域名服务器划分:根域名服务器,顶级域名服务器,二级域名服务器,三级域名服务器域名划分例子:顶级域名(.com /.org /.cn),二级域名(.baidu

2021-01-28 18:46:27 596

原创 计算机网络基础之链路层

文章目录mac地址ARP协议与RARP协议MTU数据链路层是OSI参考模型中的第二层,介乎于物理层和网络层之间。数据链路层在物理层提供的服务的基础上向网络层提供服务,其最基本的服务是将源自网络层来的数据可靠地传输到相邻节点的目标机网络层mac地址mac: 网卡的物理硬件地址,uint8_t mac[6]  一般使用16进制数字+冒号表示:08:00:27:03:fb:19mac地址在出厂时已经确定无法修改,所以通常时唯一的mac地址格式:48位对端mac地址/48位源端ma

2021-01-28 18:27:17 403

原创 计算机网络基础之网络层

文章目录网络层概述?网络层具有的功能网络层协议IP协议ICMP协议IGMP协议网络层概述?网络层是OSI参考模型中的第三层,介于传输层和数据链路层之间,它在数据链路层提供的两个相邻端点之间的数据帧的传送功能上,进一步管理网络中的数据通信,将数据设法从源端经过若干个中间节点传送到目的端,从而向运输层提供最基本的端到端的数据传送服务网络层主要是为传输层提供服务,为了向传输层提供服务,则网络层必须要使用数据链路层提供的服务。而数据链路层的主要作用是负责解决两个直接相邻节点之间的通信,但并不负责解决数据经过通

2021-01-28 17:10:28 641

原创 计算机网络详解之UDP协议与TCP协议

文章目录UDP协议UDP协议格式UDP协议特性UDP协议注意点TCP协议TCP协议格式TCP协议特性TCP的三次握手,四次挥手关于TCP连接的一些问题总结TCP的可靠传输是如何实现的?可靠传输作用TCP协议的面向字节流TCP的粘包问题UDP协议什么是UDP?Internet 协议集支持一个无连接的传输协议,该协议称为用户数据报协议(UDP,User Datagram Protocol)。UDP 为应用程序提供了一种无需建立连接就可以发送封装的 IP 数据包的方法UDP协议格式16位源端口号,16位

2021-01-28 16:06:46 1034

空空如也

空空如也

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

TA关注的人

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