intcount);" />
Cocos2d-x   发布时间:2022-05-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了cocos2dx3.x利用sokcet创建客户端和服务端 (二)大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

服务端:

初始化服务端

向指定客户端发送消息

voidsendmessage(HSocketsocket,constchar*data,255); font-size:9.5pt; font-family:新宋体">intcount);

向所有客户端发送消息

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

当服务端开启后的回调函数

std::function<void(constchar*ip)>onStart;

当有新连接时的回调函数

void(HSocketsocket)>onNewConnection;

当有消息时的回调函数

std::function<void(intcount)>onRecv;

当有客户端断开连接时的回调函数

HSocketsocket)>onDisconnect;

SocketServer.h

  1. #ifndef__SOCKET_SERVER_H__@H_607_104@
  2. #define__SOCKET_SERVER_H__@H_607_104@
  3. @H_607_104@
  4. #include"SocketBase.h"@H_607_104@
  5. classSocketServer:publicSocketBase@H_607_104@
  6. {@H_607_104@
  7. public:@H_607_104@
  8. staticSocketServer*create();@H_607_104@
  9. @H_607_104@
  10. SocketServer();@H_607_104@
  11. ~SocketServer();@H_607_104@
  12. boolstartServer();@H_607_104@
  13. voidsendmessage(HSocketsocket,constchar*data,intcount);@H_607_104@
  14. voidsendmessage(@H_801_197@intcount);@H_607_104@
  15. std::function<void(@H_801_197@char*ip)>onStart;@H_607_104@
  16. std::function<void(HSocketsocket)>onNewConnection;@H_607_104@
  17. intcount)>onRecv;@H_607_104@
  18. void(HSocketsocket)>onDisconnect;@H_607_104@
  19. private:@H_607_104@
  20. boolinitServer();@H_607_104@
  21. voidacceptClient();@H_607_104@
  22. voidacceptFunc();@H_607_104@
  23. voidnewClientConnected(HSocketsocket);@H_607_104@
  24. voidrecvmessage(HSocketsocket);@H_607_104@
  25. private:@H_607_104@
  26. HSocket_socketServer;@H_607_104@
  27. std::list<HSocket>_clientSockets;@H_607_104@
  28. };@H_607_104@
  29. #endif@H_607_104@



SocketServer.cpp

    #include"SocketServer.h"@H_607_104@
  1. SocketServer*SocketServer::create()@H_607_104@
  2. {@H_607_104@
  3. autoserver=newSocketServer;@H_607_104@
  4. returnserver;@H_607_104@
  5. }@H_607_104@
  6. SocketServer::SocketServer():@H_607_104@
  7. _socketServer(0),@H_607_104@
  8. onRecv(nullptr),@H_607_104@
  9. onStart(nullptr),248)"> onNewConnection(nullptr)@H_607_104@
  10. }@H_607_104@
  11. SocketServer::~SocketServer()@H_607_104@
  12. _clientSockets.clear();@H_607_104@
  13. if(_socketServer)@H_607_104@
  14. this->closeConnect(_socketServer);@H_607_104@
  15. };@H_607_104@
  16. boolSocketServer::startServer()@H_607_104@
  17. if(!initServer())@H_607_104@
  18. returnfalse;@H_607_104@
  19. true;@H_607_104@
  20. boolSocketServer::initServer()@H_607_104@
  21. if(_socketServer!=0)@H_607_104@
  22. _socketServer=socket(AF_INET,SOCK_STREAM,0);@H_607_104@
  23. if(error(_socketServer))@H_607_104@
  24. log("socketerror!");@H_607_104@
  25. _socketServer=0;@H_607_104@
  26. false;@H_607_104@
  27. do@H_607_104@
  28. structsockaddr_insockAddr;@H_607_104@
  29. @H_153_98@memset(&sockAddr,sizeof(sockAddr));@H_607_104@
  30. sockAddr.sin_family=AF_INET;@H_607_104@
  31. sockAddr.sin_port=htons(8000);@H_607_104@
  32. sockAddr.sin_addr.s_addr=htonl(INADDR_ANY);@H_607_104@
  33. intret=0;@H_607_104@
  34. ret=bind(_socketServer,(constsockaddr*)&sockAddr,153); font-weight:bold; BACkground-color:inherit">if(ret<0)@H_607_104@
  35. log("binderror!");@H_607_104@
  36. break;@H_607_104@
  37. ret=listen(_socketServer,5);@H_607_104@
  38. if(ret<0)@H_607_104@
  39. log("listenerror!");@H_607_104@
  40. break;@H_607_104@
  41. //start@H_607_104@
  42. charhostName[256];@H_607_104@
  43. gethostname(hostName,153); font-weight:bold; BACkground-color:inherit">sizeof(hostName));@H_607_104@
  44. structhostent*hosTinfo=gethostbyname(hostName);@H_607_104@
  45. char*ip=inet_ntoa(*(structin_addr*)*hosTinfo->h_addr_list);@H_607_104@
  46. this->acceptClient();@H_607_104@
  47. if(onStart!=nullptr)@H_607_104@
  48. log("startserver!");@H_607_104@
  49. onStart(ip);@H_607_104@
  50. true;@H_607_104@
  51. }while(false);@H_607_104@
  52. _socketServer=0;@H_607_104@
  53. voidSocketServer::acceptClient()@H_607_104@
  54. std::threadth(&SocketServer::acceptFunc,153); font-weight:bold; BACkground-color:inherit">this);@H_607_104@
  55. th.detach();@H_607_104@
  56. voidSocketServer::acceptFunc()@H_607_104@
  57. intlen=sizeof(sockaddr);@H_607_104@
  58. structsockaddr_insockAddr;@H_607_104@
  59. true)@H_607_104@
  60. HSocketclientSock=accept(_socketServer,(sockaddr*)&sockAddr,&len);@H_607_104@
  61. if(error(clientSock))@H_607_104@
  62. log("accepterror!");@H_607_104@
  63. this->newClientConnected(clientSock);@H_607_104@
  64. voidSocketServer::newClientConnected(HSocketsocket)@H_607_104@
  65. log("newconnect!");@H_607_104@
  66. _clientSockets.push_BACk(socket);@H_607_104@
  67. threadth(&SocketServer::recvmessage,153); font-weight:bold; BACkground-color:inherit">this,socket);@H_607_104@
  68. if(onNewConnection!=nullptr)@H_607_104@
  69. onNewConnection(socket);@H_607_104@
  70. voidSocketServer::recvmessage(HSocketsocket)@H_607_104@
  71. charbuff[1024];@H_607_104@
  72. ret=recv(socket,buff,153); font-weight:bold; BACkground-color:inherit">sizeof(buff),0);@H_607_104@
  73. log("recv(%d)error!",socket);@H_607_104@
  74. _mutex.lock();@H_607_104@
  75. this->closeConnect(socket);@H_607_104@
  76. _clientSockets.remove(socket);@H_607_104@
  77. if(onDisconnect!=nullptr)@H_607_104@
  78. onDisconnect(socket);@H_607_104@
  79. _mutex.unlock();@H_607_104@
  80. else@H_607_104@
  81. buff[ret]=0;@H_607_104@
  82. log("recvmsg:%s",buff);@H_607_104@
  83. if(ret>0&&onRecv!=nullptr)@H_607_104@
  84. onRecv(buff,ret);@H_607_104@
  85. voidSocketServer::sendmessage(HSocketsocket,87); font-weight:bold; BACkground-color:inherit">intcount)@H_607_104@
  86. for(auto&sock:_clientSockets)@H_607_104@
  87. if(sock==socket)@H_607_104@
  88. intret=send(socket,data,count,0);@H_607_104@
  89. log("senderror!");@H_607_104@
  90. voidSocketServer::sendmessage(@H_801_197@intcount)@H_607_104@
  91. for(auto&socket:_clientSockets)@H_607_104@
  92. log("senderror!");@H_607_104@
  93. } @H_607_104@

大佬总结

以上是大佬教程为你收集整理的cocos2dx3.x利用sokcet创建客户端和服务端 (二)全部内容,希望文章能够帮你解决cocos2dx3.x利用sokcet创建客户端和服务端 (二)所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签:3cocoscocos2dx3.xdxsokcetx创建利用客户端服务
猜你在找的Cocos2d-x相关文章
其他相关热搜词更多
phpJavaPython程序员load如何string使用参数jquery开发安装listlinuxiosandroid工具javascriptcap