cocos2dx3.x利用sokcet创建客户端和服务端(一)
来源:互联网 发布:ubuntu输入法没了 编辑:程序博客网 时间:2024/05/22 00:22
Socke基类:
包括Socket的初始化,主要是windows上,在android上就不需要了
如果平台为windows,则需要初始化
SocketBase::SocketBase(){_bInitSuccess = false;#if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)WORD wVersionRequested;wVersionRequested = MAKEWORD(2, 0);WSADATA wsaData;int nRet = WSAStartup(wVersionRequested, &wsaData);if (nRet != 0) {fprintf(stderr, "Initilize Error!\n");return;}_bInitSuccess = true;#endif }
当然析构时也要释放资源
SocketBase::~SocketBase(){#if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)if (_bInitSuccess){WSACleanup();}#endif }
因为windows的socket()返回的socket句柄为SOCKET(UINT_PTR)
与android的socket()返回的socket句柄int, 类型不一样,所以都定义为HSocket
对于服务端和客户端都有关闭连接,所以基类就实现共同的。
void SocketBase::closeConnect(HSocket socket){#if (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)close(socket);#elif (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)closesocket(socket);#endif}
当执行socket()出错时,windows返回SOCKET_ERROR, android 返回<0,
所以实现error()
bool SocketBase::error(HSocket socket){#if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)return socket == SOCKET_ERROR;#elif (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)return socket < 0;#endif}
SocketBase.h
#ifndef __SOCKET_BASE_H__#define __SOCKET_BASE_H__#include "cocos2d.h"#include <list>#include <thread>USING_NS_CC;// 对于windows平台#if (CC_TARGET_PLATFORM == CC_PLATFORM_WIN32)#include <WinSock2.h>#pragma comment(lib, "WS2_32.lib")#define HSocket SOCKET// 对于android平台#elif (CC_TARGET_PLATFORM == CC_PLATFORM_ANDROID)#include <arpa/inet.h>// for inet_**#include <netdb.h>// for gethost**#include <netinet/in.h>// for sockaddr_in#include <sys/types.h>// for socket#include <sys/socket.h>// for socket#include <unistd.h>#include <stdio.h> // for printf#include <stdlib.h>// for exit#include <string.h>// for bzero#define HSocket int#endif class SocketBase : public Ref{public:SocketBase();~SocketBase(); protected:void closeConnect(HSocket socket);bool error(HSocket socket); protected:std::mutex _mutex; private:bool _bInitSuccess;}; #endif
0 0
- cocos2dx3.x利用sokcet创建客户端和服务端(一)
- cocos2dx3.x利用sokcet创建客户端和服务端(一)
- cocos2dx3.x利用sokcet创建客户端和服务端 (二)
- cocos2dx3.x利用sokcet创建客户端和服务端 (三)
- cocos2dx3.x利用sokcet创建客户端和服务端 (二)
- cocos2dx3.x利用sokcet创建客户端和服务端 (三)
- Cocos2dx3.x使用socket创建服务端和客户端改进
- Cocos2dx3.x使用socket创建服务端和客户端改进
- Cocos2d-x 3.x利用Socket创建客户端和服务端
- Cocos2d-x 3.x利用Socket创建客户端和服务端
- android客户端利用sokcet通信和向Java服务端发请求,Java服务端把文件发给android客户端
- 利用IDEA创建Web Service服务端和客户端
- Cocos2dx3.2从零开始【一】Cocos2d-x 3.2项目创建和编译,移植到Android
- cocos2dx3.X创建项目
- 创建ROS服务端(service)和客户端(client)
- 创建webService (jax-ws)的客户端和服务端
- 利用myeclipse建立webservice服务端和客户端
- android服务端客户端(一)
- n个数的全排列的相关问题
- 19个方便渗透测试的Chrome扩展
- 归并法排序
- codevs2609 A-B问题增强版超时81分代码
- Struts2+json实现ajax,返回输出结果不正确,含有反斜杠和双引号(\")
- cocos2dx3.x利用sokcet创建客户端和服务端(一)
- IOS与JS通信
- javap查看函数签名
- Li-Fi驾到,Wi-Fi出局(要迎来新世界了吗)
- codevs2806红与黑
- Android自定义view
- Junit使用
- NSURLSession
- GSP Algorithm: Sequence Mining.