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

前端之家收集整理的这篇文章主要介绍了cocos2dx3.x利用sokcet创建客户端和服务端(一)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

Socke基类:

包括Socket的初始化,主要是windows上,在android上就不需要了

如果平台为windows,则需要初始化

  1. SocketBase::SocketBase()@H_301_21@@H_301_21@
  2. {@H_301_21@
  3. _bInitSuccess=false@H_301_21@;@H_301_21@@H_301_21@
  4. #if(CC_TARGET_PLATFORM==CC_PLATFORM_WIN32)@H_301_21@@H_301_21@@H_301_21@
  5. WORD@H_301_21@wVersionRequested;@H_301_21@@H_301_21@
  6. wVersionRequested=MAKEWORD(2,0);@H_301_21@
  7. WSADATAwsaData;@H_301_21@
  8. int@H_301_21@nRet=WSAStartup(wVersionRequested,&wsaData);@H_301_21@@H_301_21@
  9. if@H_301_21@(nRet!=0)@H_301_21@@H_301_21@
  10. fprintf(stderr,"InitilizeError!\n"@H_301_21@);@H_301_21@@H_301_21@
  11. return@H_301_21@;@H_301_21@@H_301_21@
  12. }@H_301_21@
  13. _bInitSuccess=true@H_301_21@;@H_301_21@@H_301_21@
  14. #endif@H_301_21@@H_301_21@@H_301_21@
  15. @H_301_21@
  16. }@H_301_21@


当然析构时也要释放资源

    SocketBase::~SocketBase()@H_301_21@@H_301_21@
  1. #if(CC_TARGET_PLATFORM==CC_PLATFORM_WIN32)@H_301_21@@H_301_21@@H_301_21@
  2. if@H_301_21@(_bInitSuccess)@H_301_21@@H_301_21@
  3. {@H_301_21@
  4. WSACleanup();@H_301_21@
  5. #endif@H_301_21@@H_301_21@@H_301_21@
  6. 因为windows的socket()返回的socket句柄为SOCKET(UINT_PTR)

    与android的socket()返回的socket句柄int,类型不一样,所以都定义为HSocket

    对于服务端和客户端都有关闭连接,所以基类就实现共同的。

    void@H_301_21@SocketBase::closeConnect(HSocketsocket)@H_301_21@@H_301_21@
  1. #if(CC_TARGET_PLATFORM==CC_PLATFORM_ANDROID)@H_301_21@@H_301_21@@H_301_21@
  2. close(socket);@H_301_21@
  3. #elif(CC_TARGET_PLATFORM==CC_PLATFORM_WIN32)@H_301_21@@H_301_21@@H_301_21@
  4. closesocket(socket);@H_301_21@
  5. }@H_301_21@

当执行socket()出错时,windows返回SOCKET_ERROR,android返回<0,

所以实现error()

    bool@H_301_21@SocketBase::error(HSocketsocket)@H_301_21@@H_301_21@
  1. return@H_301_21@socket==SOCKET_ERROR;@H_301_21@@H_301_21@
  2. #elif(CC_TARGET_PLATFORM==CC_PLATFORM_ANDROID)@H_301_21@@H_301_21@@H_301_21@
  3. return@H_301_21@socket<0;@H_301_21@@H_301_21@
  4. SocketBase.h@H_301_21@

      #ifndef__SOCKET_BASE_H__@H_301_21@@H_301_21@@H_301_21@
    1. #define__SOCKET_BASE_H__@H_301_21@@H_301_21@@H_301_21@
    2. #include"cocos2d.h"@H_301_21@@H_301_21@@H_301_21@
    3. #include<list>@H_301_21@@H_301_21@@H_301_21@
    4. #include<thread>@H_301_21@@H_301_21@@H_301_21@
    5. USING_NS_CC;@H_301_21@
    6. //对于windows平台@H_301_21@@H_301_21@@H_301_21@
    7. #include<WinSock2.h>@H_301_21@@H_301_21@@H_301_21@
    8. #pragmacomment(lib,"WS2_32.lib")@H_301_21@@H_301_21@@H_301_21@
    9. #defineHSocketSOCKET@H_301_21@@H_301_21@@H_301_21@
    10. //对于android平台@H_301_21@@H_301_21@@H_301_21@
    11. #include<arpa/inet.h>//forinet_**@H_301_21@@H_301_21@@H_301_21@
    12. #include<netdb.h>//forgethost**@H_301_21@@H_301_21@@H_301_21@
    13. #include<netinet/in.h>//forsockaddr_in@H_301_21@@H_301_21@@H_301_21@
    14. #include<sys/types.h>//forsocket@H_301_21@@H_301_21@@H_301_21@
    15. #include<sys/socket.h>//forsocket@H_301_21@@H_301_21@@H_301_21@
    16. #include<unistd.h>@H_301_21@@H_301_21@@H_301_21@
    17. #include<stdio.h>//forprintf@H_301_21@@H_301_21@@H_301_21@
    18. #include<stdlib.h>//forexit@H_301_21@@H_301_21@@H_301_21@
    19. #include<string.h>//forbzero@H_301_21@@H_301_21@@H_301_21@
    20. #defineHSocketint@H_301_21@@H_301_21@@H_301_21@
    21. @H_301_21@
    22. class@H_301_21@SocketBase:@H_301_21@public@H_301_21@Ref@H_301_21@@H_301_21@
    23. public@H_301_21@:@H_301_21@@H_301_21@
    24. SocketBase();@H_301_21@
    25. ~SocketBase();@H_301_21@
    26. protected@H_301_21@:@H_301_21@@H_301_21@
    27. void@H_301_21@closeConnect(HSocketsocket);@H_301_21@@H_301_21@
    28. bool@H_301_21@error(HSocketsocket);@H_301_21@@H_301_21@
    29. std::mutex_mutex;@H_301_21@
    30. private@H_301_21@:@H_301_21@@H_301_21@
    31. bool@H_301_21@_bInitSuccess;@H_301_21@@H_301_21@
    32. };@H_301_21@
    33. #endif@H_301_21@@H_301_21@

    猜你在找的Cocos2d-x相关文章