cocos2dx 跨平台 tcp 库

转载
http://blog.csdn.net/cocosviva/article/details/9304289

ccnet提供的是一套跨3平台 win32 android linux ios 的网络通信解决方案,CSocket封装了提供的IO操作,采用select无阻塞IO读写实现。

CSocket //提供了IO封装,对开发者透明

CNetBean //管理一个TCP长连接的生命周期,读写数据

CStream //提供字节流封装,读写

所有需要使用到ccnet的地方,只需要#include "ccnet/net.h" 即可

管理一个网络生命的周期,需要继承自CNetBean,例如

登陆服务器的连接对象(CLoginNetBean : CNetBean)

游戏主逻辑的连接对象(CLogicNetBean : CNetBean)

扫描二维码关注公众号,回复: 625851 查看本文章

地图服务器的连接对象(CMapNetBean : CNetBean)

在设置好目标IP地址和端口号之后,就可以调用connect()进行连接,连接成功会调用onConnected(),连接中发生错误onConnectError,连接超时onConnectTimeout,连接超时的时间默认是10秒,根据需求自行修改。

继承自CNetBean的网络对象,需要定义DEFINE_SINGLE_FUNCTION(xx)来实现单例。以便在全局使用sharedNetBean()来获得网络对象的实例,另外CNetBean的检测读写操作必须通过调用drive()方法来进行,也就是说,每帧必须要调用drive(),开发者可以注册一个schedule,之后每帧调用drive,如果有ccbase的配合,可以注册一个全局的Looper,在loop的帧调用方法中,调用drive()。

write()方法需要传递一个CStream对象,处于连接状态时,在任意的位置调用即可。

onMessage()方法带回一个CStream对象,根据具体的业务逻辑去读响应位置的字节。

比较重要的一点,在CNetBean里有一个宏

//接收数据是否开启封包组包算法
#define CLIP_PACKET 1

这个宏开始是来控制长度字节的,如果开启了这个宏表示在发包的过程中,会在数据包之前加4个字节,表示整个数据包的长度,而在收包的时候,会先读取4个字节int,表示之后要收的包的长度,这个算法主要为了解决网络通信的过程中,发的数据包量过大导致粘包的问题。

 

猜你喜欢

转载自andinker.iteye.com/blog/1977967
今日推荐