自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 异步 回调(1)

异步的概念定义应用场景

2024-12-20 15:59:23 166

原创 C#委托与事件(2)

我说的代理,是指设计模式中的代理。代理与实际对象有相同的接口,委托与实际方法有相同的方法签名。无论是相同的接口,还是相同的方法签名,其本质是遵循相同的协议。不同点多了,如目的不同,委托只是回调,而代理是对实际对象的访问控制。件和委托的关系有点像字段和属性的关系。在使用者看来,只有事件,而没有委托。事件是对委托的包装,这个没错,到底包装了哪些东西?1、保护委托字段,对外不开放,所以外部对象没法直接操作委托。2、事件的处理方法在对象外部定义,而事件的执行是在对象的内部,至于事件的触发,何时何地无所谓。

2024-12-20 13:36:09 448

原创 C#委托与事件(1)

在js中,并没有提委托的概念,却有“回调”,比如ajax回调。我说的代理,是指设计模式中的代理。代理与实际对象有相同的接口,委托与实际方法有相同的方法签名。无论是相同的接口,还是相同的方法签名,其本质是遵循相同的协议。不同点多了,如目的不同,委托只是回调,而代理是对实际对象的访问控制。1、多播委托:一个委托可以代表多个相同签名的方法,当委托被调用时,这些方法会依次执行。2、委托的构造函数,有两个参数,一个类型是IntPtr,用来接收方法的。2、委托的实例化与它的执行是在不同的对象中完成的。

2024-12-18 19:45:48 185

原创 KCP和TCP的对比

发送端发送了1,2,3,4,5几个包,然后收到远端的ACK: 1, 3, 4, 5,当收到ACK3时,KCP知道2被跳过1次,收到ACK4时,知道2被跳过了2次,此时可以认为2号丢失,不用等超时,直接重传2号包,大大改善了丢包时的传输速度。ARQ模型响应有两种,UNA(此编号前所有包已收到,如TCP)和ACK(该编号包已收到),光用UNA将导致全部重传,光用ACK则丢失成本太高,以往协议都是二选其一,而 KCP协议中,除去单独的 ACK包外,所有包都有UNA信息。KCP的ACK是否延迟发送可以调节。

2024-12-10 16:27:09 296

原创 KCP知识点

每个TCP连接的两端都维护一组窗口:发送窗口结构(send window structure)和接收窗口结构(receive window structure)。发送端计算其可用窗口,即它可以立即发送的数据量。可用窗口(允许发送但还未发送)计算值为提供窗口(即由接收端通告的窗口)大小减去在传(已发送但未得到确认)的数据量。图中P1、P2、P3分别记录了窗口的左边界、下次发送的序列号、右边界。TCP连接的两端交互作用,互相提供数据流的相关信息,包括报文段序列号、ACK号和窗口大小(即接收端的可用空间)。

2024-12-10 15:42:24 228

原创 KCP知识点

只要超过了一段时间还没有收到确认,就认为已发送的帧出错或丢失了,因而重传已发送过的帧。

2024-12-09 15:51:52 155

原创 TCP和UDP有啥区别(1)

UDP(User Datagram Protocol,用户数据报协议)是一种无连接的、简单的传输层协议。可靠性:TCP通过序列号和确认机制确保数据包按顺序传输,并使用重传机制处理丢失的数据包。连接建立:TCP是面向连接的协议,这意味着在发送数据之前,通信双方需要先建立一个连接。无连接性:UDP是无连接的协议,发送方和接收方之间不需要建立连接就可以传输数据。低延迟:由于UDP的简化机制,它的传输延迟较低,非常适合实时应用。不可靠性:UDP不提供数据包的顺序保证,也不处理丢失的数据包。

2024-12-06 10:58:05 241

原创 KCP知识点

说到TCP可靠机制,先说一说自动重传请求(Automatic Repeat-reQuest,ARQ),ARQ是属于OSl模型中数据链路层的错误纠正协议之一,因为TCP传输层的主要可靠传输机制思想来自于ARQ。总结成一句话就是TCP的可靠传输机制是在 传输层完成的,而可靠机制原理应用的是ARQ的工作原理。搞懂了ARQ,就搞懂了真谛,当然TCP除了ARQ机制外,还有一些其他机制,本文章先讲ARQ的可靠机制原理后再讲TCP其他机制。所以UDP协议是不可靠的。使得每一个信息都能保证到达,所以是可靠的。

2024-12-05 20:05:38 200

原创 KCP原理

答案就是把TCP的可靠机制移植过来,可TCP的可靠机制是在传输层完成的,而UDP在传输层无法保证数据的可靠传输,只能通过应用层来实现了。这就是KCP做法,也是其他UDP可靠算法的做法,在UDP身上套一个可靠机制算法,只不过使用上会有差异而已。KCP是一个快速可靠协议,能以比 TCP浪费10%-20%的带宽的代价,换取平均延迟降低 30%-40%,且最大延迟降低三倍的传输效果。纯算法实现,并不负责底层协议(如UDP)的收发,需要使用者自己定义下层数据包的发送方式,以 calback的方式提供给KCP。

2024-12-04 19:01:20 162

原创 TCP解决粘包的方法

Nagle算法是TCP协议中的一种优化算法,目的是避免发送小的数据包。然而,关闭Nagle算法并不能完全解决粘包问题,因为接收方应用层如果没有及时读取TCP接收缓冲区中的数据,仍然会发生粘包。自定义请求协议:将请求的数据封装为两部分:消息头(包含数据大小)和消息体(具体数据)。接收方根据消息头中的长度信息读取完整的数据包。特殊字符结尾:在数据包之间设置边界,如添加特殊符号。接收方通过这些边界将不同的数据包拆分开。固定数据大小:发送方每个数据包都固定长度,如果数据不足则通过补充空格的方式补全到指定长度。

2024-12-03 20:21:39 131

原创 TCP为什么会粘包

接收方用户进程如果不及时读取接收缓冲区中的数据,也会导致粘包现象。如果下一包数据到达时前一包数据尚未被用户进程取走,下一包数据就会接在前一包数据之后,从而导致粘包。TCP粘包是指在传输过程中,多个数据包被连续存储在接收缓冲区中,接收方在读取数据时无法确定每个数据包的边界,从而导致数据包粘连在一起。粘包现象的产生有多种原因,既可能由发送方引起,也可能由接收方引起。如果连续几次发送的数据量较小,TCP会根据优化算法将这些数据合并成一个数据包发送出去,从而导致接收方收到粘包数据。

2024-12-02 19:07:35 204

原创 C#知识点

在托管堆中分配的每个对象都有与之相关联的附加成员并且这些成员必须被初始化;枚举类型是一种独特的值类型,用于声明一组具有相同性质的常量;值类型:整数,浮点数,布尔等;局部变量存在于表示声明该变量的块语句或者方法结束的封闭花括号之前的作用域内。变量的作用域:只要字段所属的类在某个作用域内,其字段也在改作用域内。常量:常量就是值固定不变的量,在编译时已经确认。值类型直接储存其值,引用类型储存对其值的引用。值类型在栈中操作,引用类型在堆中分配储存但愿。数组:元素类型,数组的维数,每个数组的上下限。

2024-12-01 18:47:51 161

原创 C#线程(3)

1 .线程池的线程不能设置名字(导致线程调试困难)。2 .线程池的线程都是background线程3 .阻塞一个线程池的线程,会导致延迟。4 .可以随意设置线程池的优先级,在回到线程池时改线程就会被重置。

2024-11-28 19:45:34 201

原创 C#线程(2)

线程池通过共享和回收线程,允许在不影响性能的情况下启用多线程。一旦Foreground线程执行完,应用程序结束,background就会强制结束。默认情况下创建的线程都是Foreground,只要有一个Foregournd线程在执行,应用程序就不会关闭。每个.NET程序都有一个线程池,线程池维护着一定数量的工作线程,这些线程等待着执行分配下来的任务。线程t调用Join方法,阻塞主线程,直到t线程执行结束,再执行主线程。Join可以实现暂停另一个线程,直到调用Join方法的线程结束。

2024-11-27 19:48:55 131

原创 C#的线程(一)

线程是一个独立的运行单元,每个进程内部都有多个线程,每个线程都可以各自同时执行指令。每个线程都有自己独立的栈,但是与进程内的其他线程共享内存。在该线程上可以创建其他线程。在多处理器计算机上,多线程用一种混合的时间切片和真正的并发性来实现,不同的线程会在不同的cpu运行代码。线程调度程序确保所有活动线程都被分配到合适的执行时间,线程在等待或阻止时 (例如,在一个独占锁或用户输入) 不会消耗 CPU 时间。CLR使每个线程都有自己独立的内存栈,所以每个线程的本地变量都相互独立。

2024-11-26 19:12:11 197

原创 TCP和UDP有啥区别(3)

第三次握手:客户端收到服务器的SYN-ACK包后,发送一个ACK包确认收到服务器的请求。第二次握手:服务器收到SYN包后,回复一个SYN-ACK包,确认收到请求,并向客户端发送自己的SYN请求。第一次握手:客户端向服务器发送一个SYN(同步序列号)包,请求建立连接。第四次挥手:发送方收到FIN包后,发送一个ACK包确认。第二次挥手:接收方收到FIN包后,发送一个ACK包确认。第一次挥手:发送方发送一个FIN包,表示不再发送数据。第三次挥手:接收方准备断开连接时,发送一个FIN包。

2024-11-24 18:54:52 219

原创 TCP和UDP有啥区别(2)

每个数据包都有一个序列号,接收方会发送确认包(ACK)确认收到数据。如果发送方没有在规定时间内收到确认包,它会重新发送数据包。流量控制通过调整发送方的传输速率,确保接收方不会被淹没。它不会跟踪数据包的传输状态,也不会重传丢失的数据。发送方可以在任何时候发送数据,而不需要事先通知接收方。每个数据包独立传输,接收方收到的数据包顺序可能与发送顺序不同。:UDP不具备流量控制和拥塞控制机制。发送方以固定速率发送数据包,无法适应网络条件的变化。它通过序列号和确认机制确保接收方按正确顺序接收到数据包。

2024-11-24 18:28:24 144

原创 C#Socket(1)

对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。其实socket也没有层的概念,它只是一个外观设计模式的应用,我们大量用的都是通过socket实现的。我们平常说的TCP、UDP是指的行业规范好的通信协议,它们体现为具体的编程模型就是socket编程。socket是一种特殊文件,说白了Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。这样利用三元组(ip地址,协议,端口)就可以标识网络的进程了,网络中的进程通信就可以利用这个标志与其它进程进行交互。

2024-11-20 19:27:28 340

原创 C#基础知识点

white 和 do...white。双与 &&,双或 ||或与非 | &!

2024-11-19 20:34:05 104

原创 C#静态与非静态的区别

在调用静态成员的时候,需要使用类名.静态成员名;1.在非静态类中,既可以有实例成员,也可以有静态成员。静态成员必须使用类名去调用,而实例成员使用对象名调用。2.在调用实例成员的时候,需要使用对象名.实例成员;实例函数中,既可以使用静态成员,也可以使用实例成员。静态函数中,只能访问静态成员,不允许访问实例成员。静态类中只允许有静态成员,不允许出现实例成员。

2024-11-19 20:32:55 88

原创 C#数据类型

C# 通用类型系统(Common Type System - CTS)中所有数据类型的终极基类。char 16 位 Unicode 字符 U +0000 到 U +ffff。bool 布尔值 True 或 False。,它们分别存储数字、字符、浮点数。值类型变量可以直接分配给一个值。您可以存储任何类型的值在动态数据类型变量中。int 32 位有符号整数类型。类型时,系统分配内存来存储值。允许您给变量分配任何字符串值。值类型直接包含数据。

2024-11-18 20:15:49 123

原创 C#调试方法

可以通过 (调试-窗口-断点) 打开断点窗口,窗口显示了当前项目中添加了的所有的断点,我们可以在这里定位断点的位置,也可以去删除断点。1.右击代码行,选择breakpoint(断点) -> insert breakpoint(插入断点)断点是源代码中自动进入中断模式的一个标记,当遇到断点的时候,程序会进入中断模式。我们在查找错误的时候需要将程序中断,可以来添加断点,断点是什么?3.光标定位到代码行,按下F9键,在此按下F9是取消断点。4.在需要添加断点的行首位置,直接单击,再次单击取消断点。

2024-11-15 13:49:22 542

空空如也

空空如也

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

TA关注的人

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