步骤一:在TransactionModule中有业务请求时,检查是否有连上服务器,没有链接上则执行步骤二,如果链接状态正常,则执行步骤三。
步骤二:创建Socket,链接服务器,如果链接成功,则执行步骤三,如果链接失败则报错,请求失败,结束。
步骤三:发请求数据到服务器,判断send返回状态,如果小于0,执行步骤四,如果已发送长度等于发送长度,则执行步骤五,否则继续执行步骤三再次发送剩余数据(这里没有考虑等于0的状态)
步骤四:返回了SOCKET_ERROR错误,关闭socket,重置链接状态和创建Socket状态,返回错误,请求失败,结束。
步骤五:检查接收线程是否启动,如果线程正在运行,则执行步骤七,否则执行步骤六。
步骤六:创建线程,判断停止标志,循环执行接收数据函数(使用libevent的话,仅仅是执行dispatch),然后转到步骤七,等待数据返回。
步骤七:等待服务器数据返回,阻塞状态,如果有数据返回,则执行步骤八。
步骤二:创建Socket,链接服务器,如果链接成功,则执行步骤三,如果链接失败则报错,请求失败,结束。
步骤三:发请求数据到服务器,判断send返回状态,如果小于0,执行步骤四,如果已发送长度等于发送长度,则执行步骤五,否则继续执行步骤三再次发送剩余数据(这里没有考虑等于0的状态)
步骤四:返回了SOCKET_ERROR错误,关闭socket,重置链接状态和创建Socket状态,返回错误,请求失败,结束。
步骤五:检查接收线程是否启动,如果线程正在运行,则执行步骤七,否则执行步骤六。
步骤六:创建线程,判断停止标志,循环执行接收数据函数(使用libevent的话,仅仅是执行dispatch),然后转到步骤七,等待数据返回。
步骤七:等待服务器数据返回,阻塞状态,如果有数据返回,则执行步骤八。
步骤八:当有数据到达时,判断接收状态,如果大于等于0,则执行步骤四,并设置线程终止标志。否则把数据添加到公共缓冲区或者公共队列(线程安全)中。
cocos2d-x scoket 解决方案
网上搜索的几篇优秀的关于socket的文章
纯c++版的
1. 跨平台的游戏客户端Socket封装
注意添加头文件
#include
#include
cocos2d-x 扩展版的
2. 包含到cocos2d-x里的tcpsocket源码
coocs2dx 简易封装的
3. cocos2d-x 跨平台Socket网络模块
cocos2d-x BSD版
4. Cocos2d-x基于BSD Socket网络通讯模块
其他相关
5. 基于Socket的UDP和TCP编程介绍