![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
网络编程
Emmmwzh
已经成为一只码农
展开
-
TCP为什么需要心跳包
在网络编程中,默认收到一个空的数据包就表示网络连接断开(我猜可能是TCP的FIN报文),然而客户端电脑死机或者无线突然拔出之类的就不能正常完成4次挥手,就收不到这个空的数据包了,在unity中可以随便写一个连接后台的脚本,运行后通过这两个按钮来模拟这种情况,可以看到服务端是没有收到空数据包,所以需要一个心跳包来获取客户端的连接状态。原创 2017-12-27 22:34:42 · 1947 阅读 · 0 评论 -
帧同步服务器计时器
不太懂后台的东西,欢迎大佬指教一下~假设服务端是66毫秒一帧,实现思路把每一盘游戏作为一个对象插入计时器定时调用(发发包什么的),只要保证132毫秒内能发两个包就ok,不用准确到66毫秒发一次,因为发了客户端也不会立刻播放数据帧,客户端会有个帧缓存缓存一些数据帧,像视频缓存一样防止卡顿。(sleep(66)不保证66毫秒后就立刻唤醒线程,但是实验结果好像还不错,下面那个图的原创 2017-12-28 13:44:04 · 1554 阅读 · 0 评论 -
有两个序列a,b,大小都为n,序列元素的值任意整数,无序
有两个序列a,b,大小都为n,序列元素的值任意整数,无序;要求:通过交换a,b中的元素,使[序列a元素的和]与[序列b元素的和]之间的差最小。例如: var a=[100,99,98,1,2, 3];var b=[1, 2, 3, 4,5,40];思路设delta = Sum(a) - Sum(b)现在交换a中的i和b中的j,则S原创 2018-01-06 17:05:07 · 850 阅读 · 0 评论 -
C# const和readonly
const:声明时初始化,修饰后字面值的内置类型不能修饰类,他本身就是一个静态的所以不能static construction,无分配内存。readonly:可以在声明时初始化也可以在构造函数初始化,可以修饰自定义类,需要分配内存。可以用只读属性代替readonly,增加封装性。原创 2018-01-06 19:28:49 · 205 阅读 · 0 评论 -
C# System.GC.SuppressFinalize(object)
C#的GC释放内存不是立刻释放,而是先放到f-reachable队列中,在合适的时间调用终结器,这样延迟的终结器的调用,调用了终结器后的对象才会回收其内存,如果希望对象能更快被释放,可以实现IDispose接口并调用System.GC.SuppressFinalize(this),调用这个方法后对象不会被放进f-reachable队列中,但是注意不放进队列就不会调用终结器,所以在Dispose中要原创 2018-01-06 20:14:24 · 1517 阅读 · 0 评论 -
贪吃小怪兽介绍之客户端帧同步框架
如图所示VKey是虚拟按键,用户每一帧的输入通过事件发送到PVPGame,FixedUpdate是Unity的不是自己写的,由Unity来驱动PVPGame,每一次驱动包括发送一次数据包和从帧同步管理器获取播放的帧数:1、如果是0,说明没有多余的数据了,就是网络卡了,没收到数据。。Unity的框架还是正常运行,但是我不驱动任何物体运动,看起来跟游戏卡了一样。2、如果是大于0的数,说...原创 2018-09-13 17:33:23 · 492 阅读 · 0 评论