cocos2dx 跨平台 tcp 库

CCNet提供了一套适用于Windows、Android、Linux、iOS的网络通信解决方案,包括CSocket、CNetBean和CStream等组件。这些组件通过封装IO操作,采用select无阻塞IO读写方式实现。用户只需包含ccnet/net.h头文件即可使用,并且通过继承CNetBean类管理网络连接生命周期。此外,CCNet还支持单例模式、驱动方法调用、封包组包算法等功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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)

地图服务器的连接对象(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,表示之后要收的包的长度,这个算法主要为了解决网络通信的过程中,发的数据包量过大导致粘包的问题。

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值