Cocos2d-x official does not encapsulate the native socket, only provides the websocket, if we need a socket, different teams have different wheel-making scheme, which uses ASIO library is more, but the ASIO library is too large, I do not want to use. In fact, just need to simply encapsulate the BSD socket is good, dozens of lines of code just.
Note If you test in Android, you need to add network access, and you cannot use it in the main thread.
Paste the code, just a simple test under, if there is a problem to improve slowly.
1 #ifndef __cpp_test__socket__2 #define__cpp_test__socket__3 4#include <sys/socket.h>5#include <netinet/inch.h>6 7typedef uint8_tbyte;8typedef unsigned Short ushort;9 Ten classSocket { One Public: A Socket (); -Socket (intsockfd); -~Socket (); the - BOOLConnectConst Char* IP,ushortport); - BOOLListenushortPortintsize); -socket*accept (); + -ssize_t Send (byte*buffer, size_t size); +ssize_t recv (byte*buffer, size_t size); A at Private: - BOOLBindushortport); - - int_SOCKFD; - structsockaddr_in _addr_local; - }; in - #endif/* Defined (__cpp_test__socket__) */
Socket.h
1#include"Socket.h"2#include <netdb.h>3#include <unistd.h>4#include <arpa/inet.h>5#include <stdlib.h>6 7 Socket::socket () {8 }9 TenSocket::socket (intsockfd) { One_SOCKFD =sockfd; A } - -socket::~Socket () { the Close (_SOCKFD); - } - - + BOOLSocket::bind (ushortPort) { -_addr_local.sin_family =af_inet; +_ADDR_LOCAL.SIN_ADDR.S_ADDR =Inaddr_any; A_addr_local.sin_port =htons (port); at return:: Bind (_SOCKFD, (structsockaddr*) &_addr_local,sizeof(structSOCKADDR)) = =0; - } - - - BOOLSocket::listen (ushortPortintsize) { -_SOCKFD = socket (af_inet, Sock_stream,0); in if(_SOCKFD <0) { - return false; to } + - This-bind (port); the return:: Listen (_SOCKFD, size) = =0; * } $ Panax Notoginseng -socket*socket::accept () { the structsockaddr_in addr_remote; +socklen_t length =sizeof(addr_remote); A the intRemote =:: Accept (_SOCKFD, (structsockaddr*) &addr_remote, &length); + if(Remote <0) { - returnnullptr; $ } $ return NewSocket (remote); - } - the - BOOLSocket::connect (Const Char* IP,ushortPort) {Wuyi This->bind (0); the - structsockaddr_in addr_remote; WuADDR_REMOTE.SIN_ADDR.S_ADDR =inet_addr (IP); -addr_remote.sin_family =af_inet; AboutAddr_remote.sin_port =htons (port); $ - intSockfd_remote = socket (addr_remote.sin_family, Sock_stream,0); - if(:: Connect (Sockfd_remote, (sockaddr*) &addr_remote,sizeof(Addr_remote)) <0) { - Close (sockfd_remote); A return false; + } the_SOCKFD =Sockfd_remote; - return true; $ } the the thessize_t Socket::send (byte*buffer, size_t size) { the return:: Send (_SOCKFD, buffer, size,0); - } in the thessize_t Socket::recv (byte*buffer, size_t size) { About return:: recv (_SOCKFD, buffer, size,0); the}
Socket.cpp
BSD socket simple package. Supports Android, iOS, Mac OSX