cocos2d-x 基于BSD Socket网络通讯模块小结

lib-network:基于BSDSocket封装的跨平台多线程网络库 lib-Network 基于BSDSocket封装的跨平台多线程网络库,用于cocos2d-x游戏开发 立即下载

 

原帖地址:http://www.cnblogs.com/just-live/archive/2012/04/28/socket_cocos2dx.html

 

水平有限, 敬请见谅------

最近cocos2d-x项目需求, 写了个客户端的基于TCP的网络通讯模块(ios, android, win32), 把使用到的东东和遇到的问题记录下来.

1. 预备知识:

线程,互斥锁,信号量: 

复制代码
 //创建一个线程 
 int pthread_create(pthread_t *restrict tidp, 
                                 const pthread_attr_t *restrict attr, 
                                 void *(*start_rtn)(void),
                                 void *restrict arg);
//初始化互斥量
 int pthread_mutex_init(pthread_mutex_t *mutex, const pthread_mutex-attr_t *mutexattr);
//给互斥量上锁
int pthread_mutex_lock(pthread_mutex_t *mutex);
//给互斥量解锁
int pthread_mutex_unlock(pthread_mutex_t *mutex);
//信号量初始化
int sem_init(sem_t *sem, int pshared, unsigned int value);
//发送信号量
int sem_post(sem_t *sem);
//等待信号量
int sem_wait(sem_t *sem);
复制代码

BSD Socket: 

复制代码
//创建一个socket连接
int socket (int family, int type, int protocol);
//连接目标主机
int connect(int s, const struct sockaddr *name, int namelen);
//关闭socket连接
 int close(int fildes);
//发送内容
ssize_t send(int s, const void *msg, size_t len, int flags);
//接收内容
ssize_t recv(int s, void *buf, size_t len, int flags);
复制代码

2. WIN32平台注意事项

1) 在链接器加入附加依赖项pthreadVCE2.lib.

2) 用以下代码对网络进行初始化,退出时进行清除.

//初始化, 放在网络使用之前
WSADATA wsaData;
WSAStartup(MAKEWORD(2, 0), &wsaData)

//清除网络使用, 放在网络使用完毕之后.
WSACleanup()

3) 线程使用需要初始化, 退出时进行清除.

//线程使用之前,初始化线程
pthread_win32_process_attach_np();  
//线程使用之后,清除线程使用
pthread_win32_process_detach_np();

4) 关闭连接使用closesocket而非close.

5) 解析IP地址时,使用inet_addr, 详细如下:

复制代码
const char *addr = "192.168.1.1";
struct in_addr ip = {0};
#ifdef WIN32 
ip.s_addr = inet_addr(addr);
if(ip.s_addr == INADDR_NONE)
{
    CCLOG("can't parse IP address %s", addr);        
}
#else 
if (!inet_aton(addr, &ip))
{
    CCLOG("can't parse IP address %s", addr);
}
#endif
struct hostent *host;
host = gethostbyaddr((char *) &ip, 4, AF_INET);
复制代码

6) 判断主机连接是否关闭, 在此模块中本人使用recv返回值来判断连接是否被主机关闭, Win32和其他平台迥异的是recv返回0为主机关闭连接, 而其他平台(ios, android)返回-1为主机关闭连接.

3. ios平台注意事项

 1) 调试发现, ios平台sem_init总是返回-1, 网上求证得知可能由于ios不支持无名信号量导致, 使用以下方式用以代替sem_init.

//获取及初始化信号量
sem_t *my_sem;
my_sem = sem_open("/mysem1", O_CREAT,0664,0);

//使用sem_open方式创建的信号量在使用完毕需清除.
sem_unlink("/mysem1");

4. android平台注意事项

1)记得在AndroidManifest.xml中加上网络使用权限.

<uses-permission android:name=”android.permission.INTERNET”></uses-permission>

 

网易数智CoreAgent实战:5步教你打造企业级AI数字员工(附避坑指南) 本文以网易数智CoreAgent智能体协作中枢为核心,提供了一份企业级AI数字员工的实战部署指南。文章详细拆解了从环境准备、智能体配置、业务集成、安全合规到效果评估的五个关键步骤,并分享了部署过程中的常见“避坑”经验,旨在帮助企业技术团队高效、安全地将AI智能体落地于实际业务场景,解决AI落地难题。 阅读详情

相关推荐

告别手绘!用Aseprite+Unity Tilemap,从AI生成到2D游戏地图的保姆级搭建流程

本文详细介绍了如何利用Aseprite和Unity Tilemap从AI生成素材到搭建2D游戏地图的完整流程。涵盖AI生成素材的预处理、图层管理、动画制作,以及Unity中的Tilemap系统配置和性能优化技巧,帮助开发者高效创建像素风游戏地图。

weixin_29015483的博客 583

cocos2dx网络模块

title: cocos2dx网络模块 comments: true date: 2019-01-04 18:55:15 tags: cocos2dx categories: cocos2dx cocos2dx除了curllib和websocket其他的没有封装好用的网络库,尤其是使用socket的时候得自己分装网络层。网络层有哪些东西呢或者说我们要连接服务器收发数据需要怎样的流程? ##...

copymaster 1373

电流互感器的使用分析

有关电流互感器使用的注意事项,回头再看,耳目一新。

qq_46757048的博客 2万+

Cocos2dx 的TCP/IP socket通信模块的设计与实现(一)

最近自己写了一个斗地主的Server,最近在研究cocos2dx,

lihuapinghust的专栏 5695

Allegro 16.6 高级技巧实战:用Region规则和动态间距搞定高密度连接器布局布线

本文深入探讨了Allegro 16.6在高密度连接器布局布线中的高级技巧,重点介绍了Region规则和动态间距属性的应用。通过局部规则覆盖和分层控制,解决0.5mm以下引脚间距的布线难题,提升PCB设计效率和质量。

weixin_30352645的博客 440

2021电子科技大学分布式系统期末考点精析与实战解析

本文深入解析2021年电子科技大学分布式系统期末考试核心考点,包括分布式事务、时钟同步、GFS架构等高频内容。基于回忆版试题,提供实战解析与应试技巧,帮助考生高效复习。重点涵盖两阶段提交、Cristian算法等关键技术,适合计算机专业学生备考参考。

weixin_29251131的博客 541

cocos2d-x 跨平台Socket网络模块

相信很多人都找,但网上给出的答案又觉得看不懂。其实就是使用bsd socket.但这个只能在linux下面使用,而在window是无法使用的。所以我们要封装一下。 #ifndef __CSocket__ #define __CSocket__ #if CC_TARGET_PLATFORM==CC_PLATFORM_WIN32 #include #elif CC_TARGET_PLATF

zhangdell的专栏 2727

保边滤波之Mean shift filter

保边滤波之Mean shift filter 目录 保边滤波之Mean shift filter 一、算法原理 二、练手实现的算法代码如下: 三、实现结果 一、算法原理 在OpenCV中,meanshift filter函数为 p...

大熊 1561

cocos2dx socket 网络连接

http://blog.sina.com.cn/s/blog_693de6100101kl1t.html http://blog.youkuaiyun.com/langresser_king/article/details/8646088

hawk2844的专栏 949

【学习系列】SAP RAP 4:通过注解来完成一些常规需求

本文介绍了RAP应用中常用注解的实现方式,包括搜索帮助、文本描述绑定、联动搜索、字段控制等功能。通过@Consumption、@UI等注解可以实现搜索帮助定义、多字段联动、必输校验、默认排序和默认值设置。管理字段可通过@Semantics注解自动记录创建/修改信息,长文本使用@UI.multiLineText实现多行显示。这些注解可优化界面交互和数据管理,为后续行为定义功能开发奠定基础。文章结构清晰,针对不同需求提供了具体的实现方案和代码示例。

DeveloperMrMeng的博客 698

Vue - 列表拖曳排序 / 鼠标拖动改变顺序排列高效简洁组件(支持PC端与移动端触屏拖动,也可在滚动条内排序自动滚动,流畅丝滑无 BUG)

Vue-高效简洁列表拖曳排序/鼠标拖动改变顺序排列组件支持PC端与移动端触屏拖动,也可在滚动条内排序自动滚动,流畅丝滑无BUG列表拖曳排序插件vuedraggable拉动拽动拖动顺序改变排序js,vue.js,nuxt.js列表如何实现鼠标拖曳改变顺序排列支持滚动条内复杂数据对象带拖动效果动画排序完毕自动排列数组位置克隆Vue.Draggable官方文档教程SortableJS与vuedraggable列表拖动排序Vue拖拽组件库vuedraggable的安装与使用用户用鼠标拖动排序功能源码最好

🏆 前端领域优质创作者 4848

【cocos2dx网络游戏】搭建CS架构的基本通信框架(一)server

新建

小小少年 2066

一文读懂OpenClaw:核心组件与工作原理深度解析

Agent核心:负责理解意图、规划任务、协调执行消息系统:统一的消息格式,实现组件间解耦工具注册表:可扩展的工具系统,支持自定义工具模型适配层:多模型支持,统一API接口安全机制:沙箱隔离、权限确认、操作审计性能优化:并行执行、智能缓存、增量更新理解这些核心组件和工作原理,将帮助你更好地使用OpenClaw,也为后续开发自定义扩展打下坚实基础。在下一篇文章中,我们将详细介绍OpenClaw的界面操作,包括命令行与交互模式的各种技巧。

gaoxiang_120的专栏 833

cocos2d-x 基于BSD Socket网络通讯模块

最近cocos2d-x项目需求, 写了个客户端的基于TCP的网络通讯模块(ios, android, win32), 把使用到的东东和遇到的问题记录下来. 1. 预备知识: 线程,互斥锁,信号量:  //创建一个线程 int pthread_create(pthread_t *restrict tidp, const pthread_attr_t *restrict a

luxiaoyu_sdc的专栏 1万+

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Cocos2d-x基于BSD Socket网络通讯模块

1. 预备知识: 线程,互斥锁,信号量:  //创建一个线程 int pthread_create(pthread_t *restrict tidp, const pthread_attr_t *restrict attr, void *(*

zkdemon的专栏 1万+

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

cocos网络通信php,cocos2d-x 基于BSD Socket网络通讯模块

1. 预备知识: 线程,互斥锁,信号量: // 创建一个线程 int pthread_create(pthread_t *restrict tidp, const pthread_attr_t *restrict attr, void *(*start_rtn)( void ), void *restrict arg); // 初始化互斥量 int pthread_mutex_init(pthre...

weixin_33978578的博客 220

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

【Cocos2d-x】使用BSD Socket与Java Socket进行网络通信

【Cocos2d-x】使用BSD Socket与Java Socket进行网络通信

3925

cocos2d-x scoket 解决方案

纯c++版的 1. 跨平台的游戏客户端Socket封装 注意添加头文件 #include #include cocos2d-x 扩展版的 2. 包含到cocos2d-x里的tcpsocket源码 coocs2dx 简易封装的 3. cocos2d-x 跨平台Socket网络模块 cocos2d-x BSD版 4.  Cocos2d-x

Louis的专栏 439

跟着BOY 学习COCOS2D-X 网络篇---强联网(采用技术 BSD SOCKET+多线程技术 +protobuf)(环境搭建篇+服务器)

跟着BOY 学习COCOS2D-X 网络篇---强联网(采用技术 BSD SOCKET+多线程技术 +protobuf)(环境搭建篇+服务器)      开篇之前我要感谢几个人 流星  羽龙 阿敏  水马 teddy  他们给了我很多帮助,谢谢你们      哈哈BOY 来逆袭了 本章将讲述如果做强联网 看到群里的很多朋友对这个很感兴趣。boy 刚好对这一块 研究过 。所以就把

domzhaosh 560

socket通信

步骤一:在TransactionModule中有业务请求时,检查是否有连上服务器,没有链接上则执行步骤二,如果链接状态正常,则执行步骤三。 步骤二:创建Socket,链接服务器,如果链接成功,则执行步骤三,如果链接失败则报错,请求失败,结束。 步骤三:发请求数据到服务器,判断send返回状态,如果小于0,执行步骤四,如果已发送长度等于发送长度,则执行步骤五,否则继续执行步骤三再次发送剩余数据(

如果你想追随梦想,就要心无他念! 464

跟着BOY 学习COCOS2D-X 网络篇---强联网(采用技术 BSD SOCKET+多线程技术 +protobuf)(环境搭建篇+服务器)

哈哈BOY 来逆袭了 本章将讲述如果做强联网 看到群里的很多朋友对这个很感兴趣。boy 刚好对这一块 研究过 。所以就把技术给分享出来。首先给大家说明一下BOY 以前对服务器端也是很精通的啊 哈哈 开个玩笑 虽然不能说精通,但是搭建一个小的测的还是没问题的。 本服务器采用 apache main  技术。对于JAVA 不是很懂的同学这一章可以大概的看下。       首先我们来讲述下我们的网络通

郑州|boy的专栏 7070

socket编程(二)通过服务端实现客户端之间通信

主要流程: 思路: 1.创建一个message类用于存储客户端身份信息。private String userName;//用户名 private long userID;//用户ID private long messageID;//消息ID private long groupID;//分组ID,用于群聊 private long friendID;//好

Mr.Steven 专注于Java 3301
上一篇: 使用libcurl实现跨平台文件传输
下一篇: google ProtoBuf开发者指南
绝世神棍
博客等级 码龄19年 153粉丝 44原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值