哪有cocos2dx 3.3 socket编程的例子

请问哪有cocos2dx 3.3 socket编程的例子,自己弄了半天还是很糊涂,希望能找个可以运行的例子

搞定,很简单

哥 你搞定也告诉下我们好吗,正为这个焦头烂额

大哥,同求

搂住求教CS SOCKET方法

最后我还是用的HTTP

#include “SocketClient.h”
#include <stdio.h>
//包含WIN32平台的BSD Socket实现库
#ifdef WIN32
#pragma comment(lib, “wsock32”)
#endif

SocketClient::SocketClient(SOCKET sock)
{
m_sock = sock;
}

SocketClient::~SocketClient()
{
}

int SocketClient::Init()
{
#ifdef WIN32
//启动Socket服务
WSADATA wsaData;
WORD version = MAKEWORD(2, 0);
int ret = WSAStartup(version, &wsaData);//win sock start up
if ( ret ) {
return -1;
}
#endif

return 0;

}
//专为Win32平台,释放Socket服务
int SocketClient::Clean()
{
#ifdef WIN32
return (WSACleanup());
#endif
return 0;
}
//操作符重载
SocketClient& SocketClient::operator = (SOCKET s)
{
m_sock = s;
return (*this);
}

SocketClient::operator SOCKET ()
{
return m_sock;
}
//创建Socket连接,适用于Win32和Linux平台
//参数为指定协议集,通讯类型以及传输协议
bool SocketClient::Create(int af, int type, int protocol)
{
m_sock = socket(af, type, protocol);
if ( m_sock == INVALID_SOCKET ) {
return false;
}
return true;
}
//连接服务器,参数为ip地址、端口号
bool SocketClient::Connect(const char* ip, unsigned short port)
{
struct sockaddr_in svraddr;
svraddr.sin_family = AF_INET;
svraddr.sin_addr.s_addr = inet_addr(ip);
svraddr.sin_port = htons(port);
int ret = connect(m_sock, (struct sockaddr*)&svraddr, sizeof(svraddr));
if ( ret == SOCKET_ERROR ) {
return false;
}
return true;
}
//绑定网络服务的端口,参数为ip地址
bool SocketClient::Bind(unsigned short port)
{
struct sockaddr_in svraddr;
svraddr.sin_family = AF_INET;
svraddr.sin_addr.s_addr = INADDR_ANY;
svraddr.sin_port = htons(port);

int opt =  1;
if ( setsockopt(m_sock, SOL_SOCKET, SO_REUSEADDR, (char*)&opt, sizeof(opt)) < 0 ) 
    return false;

int ret = bind(m_sock, (struct sockaddr*)&svraddr, sizeof(svraddr));
if ( ret == SOCKET_ERROR ) {
    return false;
}
return true;

}
//设置监听端口,用于服务器端
bool SocketClient::Listen(int backlog)
{
int ret = listen(m_sock, backlog);
if ( ret == SOCKET_ERROR ) {
return false;
}
return true;
}
//接受来自客户端连接,参数为客户端对象和ip地址
bool SocketClient::Accept(SocketClient& s, char* fromip)
{
struct sockaddr_in cliaddr;
socklen_t addrlen = sizeof(cliaddr);
SOCKET sock = accept(m_sock, (struct sockaddr*)&cliaddr, &addrlen);
if ( sock == SOCKET_ERROR ) {
return false;
}

s = sock;
if ( fromip != NULL )
    sprintf(fromip, "%s", inet_ntoa(cliaddr.sin_addr));

return true;

}
//发送信息数据,参数为数据、数据长度、标签
int SocketClient::Send(const char* buf, int len, int flags)
{
int bytes;
int count = 0;

while ( count < len ) {

    bytes = send(m_sock, buf + count, len - count, flags);
    if ( bytes == -1 || bytes == 0 )
        return -1;
    count += bytes;
} 

return count;

}
//接受数据信息,参数为数据、数据长度
int SocketClient::Recv(char* buf, int len, int flags)
{
return (recv(m_sock, buf, len, flags));
}
//关闭连接
int SocketClient::Close()
{
#ifdef WIN32
return (closesocket(m_sock));
#else
return (close(m_sock));
#endif
}
//获取错误信息
int SocketClient::GetError()
{
#ifdef WIN32
return (WSAGetLastError());
#else
return (errno);
#endif
}
//dns地址解析
bool SocketClient::DnsParse(const char* domain, char* ip)
{
struct hostent* p;
if ( (p = gethostbyname(domain)) == NULL )
return false;

sprintf(ip, 
    "%u.%u.%u.%u",
    (unsigned char)p->h_addr_list, 
    (unsigned char)p->h_addr_list, 
    (unsigned char)p->h_addr_list, 
    (unsigned char)p->h_addr_list);

return true;

}

#include “SocketClient.h”
#include <stdio.h>
//包含WIN32平台的BSD Socket实现库
#ifdef WIN32
#pragma comment(lib, “wsock32”)
#endif

SocketClient::SocketClient(SOCKET sock)
{
m_sock = sock;
}

SocketClient::~SocketClient()
{
}

int SocketClient::Init()
{
#ifdef WIN32
//启动Socket服务
WSADATA wsaData;
WORD version = MAKEWORD(2, 0);
int ret = WSAStartup(version, &wsaData);//win sock start up
if ( ret ) {
return -1;
}
#endif

return 0;

}
//专为Win32平台,释放Socket服务
int SocketClient::Clean()
{
#ifdef WIN32
return (WSACleanup());
#endif
return 0;
}
//操作符重载
SocketClient& SocketClient::operator = (SOCKET s)
{
m_sock = s;
return (*this);
}

SocketClient::operator SOCKET ()
{
return m_sock;
}
//创建Socket连接,适用于Win32和Linux平台
//参数为指定协议集,通讯类型以及传输协议
bool SocketClient::Create(int af, int type, int protocol)
{
m_sock = socket(af, type, protocol);
if ( m_sock == INVALID_SOCKET ) {
return false;
}
return true;
}
//连接服务器,参数为ip地址、端口号
bool SocketClient::Connect(const char* ip, unsigned short port)
{
struct sockaddr_in svraddr;
svraddr.sin_family = AF_INET;
svraddr.sin_addr.s_addr = inet_addr(ip);
svraddr.sin_port = htons(port);
int ret = connect(m_sock, (struct sockaddr*)&svraddr, sizeof(svraddr));
if ( ret == SOCKET_ERROR ) {
return false;
}
return true;
}
//绑定网络服务的端口,参数为ip地址
bool SocketClient::Bind(unsigned short port)
{
struct sockaddr_in svraddr;
svraddr.sin_family = AF_INET;
svraddr.sin_addr.s_addr = INADDR_ANY;
svraddr.sin_port = htons(port);

int opt =  1;
if ( setsockopt(m_sock, SOL_SOCKET, SO_REUSEADDR, (char*)&opt, sizeof(opt)) < 0 ) 
    return false;

int ret = bind(m_sock, (struct sockaddr*)&svraddr, sizeof(svraddr));
if ( ret == SOCKET_ERROR ) {
    return false;
}
return true;

}
//设置监听端口,用于服务器端
bool SocketClient::Listen(int backlog)
{
int ret = listen(m_sock, backlog);
if ( ret == SOCKET_ERROR ) {
return false;
}
return true;
}
//接受来自客户端连接,参数为客户端对象和ip地址
bool SocketClient::Accept(SocketClient& s, char* fromip)
{
struct sockaddr_in cliaddr;
socklen_t addrlen = sizeof(cliaddr);
SOCKET sock = accept(m_sock, (struct sockaddr*)&cliaddr, &addrlen);
if ( sock == SOCKET_ERROR ) {
return false;
}

s = sock;
if ( fromip != NULL )
    sprintf(fromip, "%s", inet_ntoa(cliaddr.sin_addr));

return true;

}
//发送信息数据,参数为数据、数据长度、标签
int SocketClient::Send(const char* buf, int len, int flags)
{
int bytes;
int count = 0;

while ( count < len ) {

    bytes = send(m_sock, buf + count, len - count, flags);
    if ( bytes == -1 || bytes == 0 )
        return -1;
    count += bytes;
} 

return count;

}
//接受数据信息,参数为数据、数据长度
int SocketClient::Recv(char* buf, int len, int flags)
{
return (recv(m_sock, buf, len, flags));
}
//关闭连接
int SocketClient::Close()
{
#ifdef WIN32
return (closesocket(m_sock));
#else
return (close(m_sock));
#endif
}
//获取错误信息
int SocketClient::GetError()
{
#ifdef WIN32
return (WSAGetLastError());
#else
return (errno);
#endif
}
//dns地址解析
bool SocketClient::DnsParse(const char* domain, char* ip)
{
struct hostent* p;
if ( (p = gethostbyname(domain)) == NULL )
return false;

sprintf(ip, 
    "%u.%u.%u.%u",
    (unsigned char)p->h_addr_list, 
    (unsigned char)p->h_addr_list, 
    (unsigned char)p->h_addr_list, 
    (unsigned char)p->h_addr_list);

return true;

}

搜索cocos-net

。。。用websocket呗。。

…你这样写。。确定没问题??

发送和接受数据都正常啊,这代码是我从这本书光盘里找到的: Cocos2D-X游戏开发技术精解\extensions\network