cocos2dx3.x利用sokcet创建客户端和服务端 (三)

客户端:

连接服务端

bool connectServer(const char* serverIP, unsigned short port);

向服务端发送消息

void sendMessage(const char* data, int count);

接受服务端数据的回调函数

std::function<void(const char* data, int count)> onRecv;

断开连接的回调函数

std::function<void()> onDisconnect;

SocketClient.h

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. #ifndef __SOCKET_CLIENT_H__  
  2. #define __SOCKET_CLIENT_H__  
  3. #include "SocketBase.h"  
  4.   
  5. class SocketClient : public SocketBase  
  6. {  
  7. public:  
  8.     SocketClient(void);  
  9.     ~SocketClient(void);  
  10.   
  11.     bool connectServer(const char* serverIP, unsigned short port);  
  12.     void sendMessage(const char* data, int count);  
  13.   
  14.     std::function<void(const char* data, int count)> onRecv;  
  15.     std::function<void()> onDisconnect;  
  16.   
  17. private:  
  18.     bool initClient();  
  19.     void recvMessage();  
  20.   
  21. private:  
  22.     HSocket _socketServer;  
  23.     HSocket _socektClient;  
  24. };  
  25.   
  26. #endif  

SocketClient.cpp

[cpp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. #include "SocketClient.h"  
  2.   
  3.   
  4. SocketClient::SocketClient(void) :  
  5.     onRecv(nullptr),  
  6.     _socektClient(0)  
  7. {  
  8. }  
  9.   
  10.   
  11. SocketClient::~SocketClient(void)  
  12. {  
  13.     if (_socektClient != 0)  
  14.     {  
  15.         _mutex.lock();  
  16.         this->closeConnect(_socektClient);  
  17.         _mutex.unlock();  
  18.     }  
  19. }  
  20.   
  21. bool SocketClient::initClient()  
  22. {  
  23.     if (_socektClient != 0)  
  24.     {  
  25.         _mutex.lock();  
  26.         this->closeConnect(_socektClient);  
  27.         _mutex.unlock();  
  28.     }  
  29.   
  30.     _socektClient = socket(AF_INET, SOCK_STREAM, 0);  
  31.     if (error(_socketServer))  
  32.     {  
  33.         log("init client error!");  
  34.         _socektClient = 0;  
  35.         return false;  
  36.     }  
  37.   
  38.     return true;  
  39. }  
  40.   
  41. bool SocketClient::connectServer(const char* serverIP, unsigned short port)  
  42. {  
  43.     if (!this->initClient())  
  44.     {  
  45.         return false;  
  46.     }  
  47.   
  48.     struct sockaddr_in serverAddr;  
  49.     memset(&serverAddr, 0, sizeof(struct sockaddr_in));  
  50.   
  51.     serverAddr.sin_family = AF_INET;  
  52.     serverAddr.sin_port = htons(port);  
  53.     serverAddr.sin_addr.s_addr = inet_addr(serverIP);  
  54.   
  55.     int ret = 0;  
  56.     ret = connect(_socektClient, (struct sockaddr*)&serverAddr, sizeof(struct sockaddr));  
  57.     if (ret < 0)  
  58.     {  
  59.         this->closeConnect(_socektClient);  
  60.         _socektClient = 0;  
  61.         return false;  
  62.     }  
  63.   
  64.     std::thread recvThread(&SocketClient::recvMessage, this);  
  65.     recvThread.detach();  
  66.     return true;  
  67. }  
  68.   
  69. void SocketClient::recvMessage()  
  70. {  
  71.     char recvBuf[1024];  
  72.     int ret = 0;  
  73.     while (true)  
  74.     {  
  75.         ret = recv(_socektClient, recvBuf, sizeof(recvBuf), 0);  
  76.         if (ret < 0)  
  77.         {  
  78.             log("recv error");  
  79.             break;  
  80.         }  
  81.         if (ret > 0 && onRecv != nullptr)  
  82.         {  
  83.             onRecv(recvBuf, ret);  
  84.         }  
  85.     }  
  86.     _mutex.lock();  
  87.     this->closeConnect(_socektClient);  
  88.     if (onDisconnect != nullptr)  
  89.     {  
  90.         onDisconnect();  
  91.     }  
  92.     _socektClient = 0;  
  93.     _mutex.unlock();  
  94. }  
  95.   
  96. void SocketClient::sendMessage(const char* data, int count)  
  97. {  
  98.     if (_socektClient != 0)  
  99.     {  
  100.         int ret = send(_socektClient, data, count, 0);  
  101.         if (ret < 0)  
  102.         {  
  103.             log("send error!");  
  104.         }  
  105.     }  
  106. }  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值