Unity3d-Socket之龙一编年史network.dll分析(1)

今天闲着无聊,看到群里的老大共享了反编译的工具,就下载下来玩下。

说道反编译我个人不太推崇反编译,感觉不道德,毕竟是人家的代码,但是又回想一下,我们那代码看是抱着学习的态度又有何不可,所既是民族的也是世界的。=_=

好废话不多说,接着我们看看我吧一款unity制作的游戏的dll拿出来反编译了一下,收获还是蛮大的。

首先呢,我只是分析了一下他的socket代码,可谓是经典中的经典,很值得一学。

先来看看这个dll中的类和接口,了解一下大体的情况。

其中最为重要的是CNetwork和CCllientSocket类。这两个类是网络连接、接收和发送的只要运行类。

在这个游戏中呢,他将Socket封装到了自己的类中来管理,也就是CClientSocket.cs

那么我们就先来看这个类实现:

我们先来看看字段:

		private Socket m_oSocket;
		private SocketState m_nState;//这个是enum类型,主要记录socket的链接状态
		private byte[] m_oSendBuff;//发送的字节数组缓存
		private byte[] m_oRecvBuff;//接收的自己数组缓存
		private volatile int m_nStartPos;//发送开始的指针位置
		private volatile int m_nEndPos;//发送结束的指针位置
		private int m_nCurrRecvLen;//接收的总字节数
		private bool m_bSending;//是否在发送数据中
		private CNetwork m_oNetwork;//这个类总管理socket的管理类
		private IPacketBreaker m_oBreaker;//
		private object m_oStateLock = new object();//socket状态锁
		private object m_oSendingLock = new object();//发送状态锁

时间: 2024-10-06 14:20:26

Unity3d-Socket之龙一编年史network.dll分析(1)的相关文章

Unity3d-Socket之龙一编年史network.dll分析(2)-> CNetLogger

今天呢,我们来学习下network.dll里面的CNetLogger类. 顾名思义,这个类主要是debug用的,也许有些人会问了,干嘛要自己封装个debug,直接用unity自带的debug不就好了吗. 其实系统自带的有很多个缺点: 1.不能统一的开关控制debug功能,假设当你想关闭的bebug,不想再打印的时候,发现unity没有这个接口,如果自己封装个开关,那么就方便管理,想开就开,想关就关,so easy! 2.unity的debug他只能打印到控制台,当我们发布游戏的时候,那么debu

Unity3D中常用的数据结构总结与分析

Unity3D中常用的数据结构总结与分析 c#语言规范 阅读目录 1.几种常见的数据结构 2.几种常见数据结构的使用情景 来到周末,小匹夫终于有精力和时间来更新下博客了.前段时间小匹夫读过一份代码,对其中各种数据结构灵活的使用赞不绝口,同时也大大激发了小匹夫对各种数据结构进行梳理和总结的欲望.正好最近也拜读了若干大神的文章,觉得总结下常用的数据结构以供自己也能灵活的使用变得刻不容缓.那么还是从小匹夫的工作内容入手,就谈谈在平时使用U3D时经常用到的数据结构和各种数据结构的应用场景吧. 回到目录

c#编写的基于Socket的异步通信系统封装DLL--SanNiuSignal.DLL

SanNiuSignal是一个基于异步socket的完全免费DLL:它里面封装了Client,Server以及UDP:有了这个DLL:用户不用去关心心跳:粘包 :组包:发送文件等繁琐的事情:大家只要简单的几步就能实现强大的通信系统:能帮助到大家是本人觉得最幸福的事情,也希望大家 在用的过程中找出DLL中不足的地方:好改正:此DLL的苹果版和java版正在努力开发中......交流QQ:365368248:此演示源码下载地址:http://pan.baidu.com/s/1eQw1npw 里面包括

基于Linux C的socket抓包程序和Package分析 (一)

 测试运行平台:CentOS 6.5发行版,内核版本3.11 1. Linux抓包源程序 在OSI七层模型中,网卡工作在物理层和数据链路层的MAC子层. 进行网络通信时,源主机通过socket(或其它)应用程序产生IP报文,经过各个OSI层层封装,数据包以Ethernet帧的形式进入物理层.Ethernet帧包含源主机地址.IP报文.目标地址(IP地址.端口号或映射的6字节MAC地址)和需要传送到目标主机的其它信息. 目标的MAC地址是哪里来的呢?这牵扯到一个ARP协议(介乎于网络层和数据链

Python 3.5 socket OSError: [Errno 101] Network is unreachable

/******************************************************************************** * Python 3.5 socket OSError: [Errno 101] Network is unreachable * 说明: * 在网络状态一切正常的时候没有出现这个问题,当出现比较长时间的网络连接中断 * 的情况下,会出现这个现象,try...except...解决. * * 2017-3-1 深圳 南山平山村 曾剑锋

unity3D Socket连接C#server出现unity3D编辑器再次启动连接 unity3D编辑器马上卡死

unity3D Socket与C#server第一次连接时通讯正常.客服端段关闭后.unity3D编辑器再次启动连接 unity3D编辑器马上卡死 原因是Socket处于异步状态,而异步线程是不受Unity管理的. 这样会导致Unity一直与Socketserver保持着握手状态,而再次启动时无法再次于server建立握手. 我的解决方式是,在脚本内启用退出函数OnApplicationQuit().由于我的Socket是写在单例里面 所以我的代码例如以下,道理就是这个道理. void OnAp

Supervisor启动error: <class 'socket.error'>, [Errno 101] Network is unreachable

全栈与架构 > 技术设计 Supervisor启动error: <class 'socket.error'>, [Errno 101] Network is unreachable 2015/08/03 技术设计 Linux,Python,Supervisor,Tornado 合作公司的MM今天送来第六份文档,我在开发之处留意并担心的问题最终还是被提出来了.文档中大多数为细节调整,重点问题集中在全站商品分类(goodcat)的增删改查和前端展开特效.current_item定位以及数据筛

virtio network驱动分析

本文以virtio网络驱动为例,分析virtio驱动是如何处理网络IO的,驱动的定义如下 static struct virtio_device_id id_table[] = { { VIRTIO_ID_NET, VIRTIO_DEV_ANY_ID }, { 0 }, }; static unsigned int features[] = { VIRTIO_NET_F_CSUM, VIRTIO_NET_F_GUEST_CSUM, VIRTIO_NET_F_GSO, VIRTIO_NET_F_M

c#编写的基于Socket的异步通信系统--SanNiuSignal.DLL已开源

自从推出了SanNiuSignal.DLL,用户反映还是满好的;为了更好的服务于大家,我已经修复了很多BUG,同时把这个DLL开源;下面就先来介绍下 使用这个DLL开发出的简单的通信系统;如图: 想使用哪个模块就启动哪个模块,可以和客户形成通信;具体的源码下载地址1:http://www.sanniub.com/down/html/?6.html  百度网盘下载地址:http://pan.baidu.com/s/1i346GML   里面包含了SanNiuSignal.DLL的源码以及它的一个使