- 博客(13)
- 收藏
- 关注
原创 TCP 与 UDP
TCPTCP(Transmission Control Protocol,传输控制协议)是一种面向连接的、可靠的、基于字节流的通信协议,数据在传输前要建立连接,传输完毕后还要断开连接。TCP数据报结构序列号Seq(Sequence Number):占 32 位,用来标识从 计算机A 发送到 计算机B 的数据包的序号,发送的数据是被拆成多个数据包发送,序列号对每个数据包进行编号,接收方根据...
2019-10-09 20:39:28
241
转载 OSI网络七层模型 与 TCP/IP模型
OSI网络七层模型 | TCP/IP模型OSI 是 Open System Interconnection 的缩写,译为“开放式系统互联”。OSI模型把网络通信的工作分为 7 层,从下到上分别是物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。OSI 只是存在于概念和理论上的一种模型,它的缺点是分层太多,增加了网络工作的复杂性,所以没有大规模应用。后来人们对 OSI 进行了简化,合...
2019-10-08 21:42:17
268
转载 C/C++ Socket编程(七)
UDP 和 TCPTCP 是面向连接的传输协议,建立连接时要经过三次握手,断开连接时要经过四次握手,中间传输数据时也要回复 ACK 包确认,多种机制保证了数据能够正确到达,不会丢失或出错。UDP 是非连接的传输协议,没有建立连接和断开连接的过程,它只是简单地把数据丢到网络中,也不需要 ACK 包确认。UDP 传输数据就好像我们邮寄包裹,邮寄前需要填好寄件人和收件人地址,之后送到快递公司即可,...
2019-09-30 11:00:13
300
转载 C/C++ Socket编程(六)
网络数据的大小端问题不同 CPU 中,4 字节整数 1 在内存空间的存储方式是不同的。4 字节整数 1 可用 2 进制表示如下:00000000 00000000 00000000 00000001有些 CPU 以上面的顺序存储到内存,另外一些 CPU 则以倒序存储,如下所示:00000001 00000000 00000000 00000000若不考虑这些就收发数据会发生问题,因为保存...
2019-09-30 10:45:39
262
转载 C/C++ Socket编程(五)
shutdown():优雅地断开TCP连接调用 close()/closesocket() 函数意味着完全断开连接,即不能发送数据也不能接收数据,这种“生硬”的方式有时候会显得不太“优雅”。上图演示了两台正在进行双向通信的主机。主机A发送完数据后,单方面调用 close()/closesocket() 断开连接,之后主机A、B都不能再接受对方传输的数据。实际上,是完全无法调用与数据收发有关的...
2019-09-30 10:25:38
1045
转载 C/C++ Socket编程(四)
Socket编程实现回声客户端所谓“回声”,是指客户端向服务器发送一条数据,服务器再将数据原样返回给客户端。下面实现 Windows 下的回声程序,Linux 下稍作修改即可。server.cpp#include <stdio.h>#include <winsock2.h>#pragma comment (lib, "ws2_32.lib") //加载 ws2...
2019-09-30 10:08:12
339
转载 C/C++ Socket编程(三)基本函数
socket():创建套接字不管是 Windows 还是 Linux,都使用 socket() 函数来创建套接字。socket() 在两个平台下的参数是相同的,不同的是返回值。Linux 中的一切都是文件,每个文件都有一个整数类型的文件描述符;socket 也是一个文件,也有文件描述符。使用 socket() 函数创建套接字以后,返回值就是一个 int 类型的文件描述符。Windows 会区...
2019-09-29 22:11:25
1015
转载 C/C++ Socket编程(二)
Linux下的socket演示程序server.cpp 是服务器端代码,client.cpp 是客户端代码,要实现的功能是:客户端从服务器读取一个字符串并打印出来。服务器端代码 server.cpp:#include <stdio.h>#include <string.h>#include <stdlib.h>#include <unistd....
2019-09-29 20:41:52
662
转载 C/C++ Socket编程(一)
UNIX/Linux 中的 socket在 UNIX/Linux 系统中,为了统一对各种硬件的操作,简化接口,不同的硬件设备也都被看成一个文件。对这些文件的操作,等同于对磁盘上普通文件的操作,UNIX/Linux 中的一切皆文件!为了表示和区分已经打开的文件,UNIX/Linux 会给每个文件分配一个 ID,这个 ID 就是一个整数,被称为文件描述符(File Descriptor)。例如:...
2019-09-29 20:32:40
973
原创 位运算
&(按位与)一个数&1结果为该数二进制表示中的最末位,可用于判断该数奇偶,0为偶数,1为奇数。|(按位或)^(按位异或)相同为0,不同为1优先级:& > ^ > |~(按位取反)<<(按位左移)a << b(a * 2^b):a转成二进制后左移b位,右边用0填充a << 1 比 a * 2 效率更高...
2019-09-29 16:13:01
127
原创 窗口内最大最小值更新结构及其应用
窗口内最大值或最小值的更新结构(单调双向队列)借助一个双端队列,保存窗口内的数的在数组中的下标。当窗口新增一个数,若 队列为空 或 该数大于等于队尾表示的数,则队尾弹出,继续进行判断;若该数小于队尾表示的数,将该数的下标从队尾进队。当窗口减少一个数,判断队头是否过期,过期则队头出队。窗口内最大值即为队头表示的数。1.假如一个子数组达标(max - min <= num...
2019-09-27 16:27:10
158
原创 单调栈结构及其应用
单调栈解决一个数组中,对于每个数,求左边离它最近的比它大(小)的数,右边离它最近的比它大(小)的数,时间复杂度O(N)实现。准备一个栈,栈底到栈顶是从大到小的(保存的是数据的下标)。每来一个数 num,若 栈空 或 num < 栈顶top,num入栈,继续判断下一个数。若num = top,将 num 与 top 压在同一层。若num > top,则 top 出栈,同时 t...
2019-09-27 15:57:38
173
原创 常见排序算法(C++实现)
排序的稳定性排序后原本相同的值相对次序的保持不变。稳定:冒泡排序,插入排序,归并排序,桶排序不稳定:选择排序,快速排序(有稳定的版本),堆排序,希尔排序冒泡排序平均时间复杂度:O(N^2)额外空间复杂度O(1)稳定void bubbleSort(vector<int> &vec){ if (vec.size() < 2) return; fo...
2019-09-27 14:29:44
189
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人