Socket通讯:
Socket,俗称网络套接字,本身并不是协议,而是一个调用接口,是对TCP/IP协议的封装和应用,提供了一系列方法方便开发者进行网络通讯。
TCP/IP协议是使用最早的通讯协议,它是传输层协议,主要解决数据如何在网络中传输。
Socket中又分为流模式、数据报模式、原始套接字三种模式,即Socket_STREAM,Socket_DREAME,SOCL_RAW方式。
TCP :Transmission Control Protocol,传输控制协议,是面向连接的协议,也就是说,在收发数据前,必须和对方建立可靠的连接。一个TCP连接必须要经过三次“对话”才能建立起来,其中的过程非常复杂,但也是最安全的。
UDP : User Data Protocol,用户数据报协议。传输数据之前源端和终端不建立连接,发送端直接把数据发送到网络,接收端把消息段放在队列中,应用程序每次从队列中读一个消息段。
原始套接字(SOCK_RAW):原始套接字与标准套接字(标准套接字指的是前面介绍的流套接字和数据报套接字)的区别在于:原始套接字可以读写内核没有处理的IP数据包,而流套接字只能读取TCP协议的数据,数据报套接字只能读取UDP协议的数据。因此,如果要访问其他协议发送数据必须使用原始套接字。
http协议
HTTP协议也叫超文本传输协议。是互联网广泛使用的通信协议,常用于B/S架构中。
HTTP连接使用的是短连接形式,也就是“请求-响应”的方式,不仅在请求时需要先建立连接,而且需要客户端向服务器发出请求后,服务器端才能回复数据。
HTTP常用的有2种数据提交方式,分别是GET、POST。。
l get是从服务器上获取(查询)数据,post是向服务器传送数据;
l get传送的数据量较小,不能大于2KB,post传送的数据量较大,一般认为不受限;
l get安全性非常低;post安全性相对来说就比较好了;
Cocos2d-x封装了3个类来处理HTTP请求,HttpRequest、HttpClient和HttpResponse。它们在命名空间cocos2d::network中定义,所以使用时要先声明该命名空间。
请求过程:
1. 创建 HttpRequest 的实例;
2. 设置请求方式,GET、POST等。
3. 设置请求地址和发送的数据;
4. 设置响应回调函数,在回调函数中处理获取的数据;
5. 创建HttpClient实例,发送请求;
HttpRequest:
是一种数据类型,它提供了一些方法用来定义或获取HTTP请求的参数。常用方法包括下面几种。
设置请求连接:
void setUrl(const char * url);
设置请求类型:
void setRequestType(Type type)
Type是Cocos2d-x定义的一个枚举类型,包括5种类型。
enum class Type
{
GET,
POST,
PUT,
DELETE,
UNKNOWN,
};
设置回调函数:
void setResponseCallback(Ref *pTarget,SEL_HttpResponse pSelector )
设置请求的数据,参数buffer是提交的数据,len是请求数据的长度:
void setRequestData(const char* buffer, unsigned intlen);
请求网址:
http://httpbin.org/ip
HttpClient:
用来控制请求相关的参数,比如发送请求,设置请求超时时间。它使用单例模型。这一模式的目的是使得类的一个对象成为系统中的唯一实例。cocos2d中多处用到这一模型。
比如Director对象,创建Director::getInstance()。
又比如,音频处理对象:SimpleAudioEngine::getInstance();
常用方法:
发送请求:
send(HttpRequest* request)
设置连接超时时间:
setTimeoutForConnect(int value)
HttpResponse:
包含服务器返回的数据等信息。使用HttpResponse提供的方法可以获取这些数据。
常用方法:
std::vector
获取请求返回的数据:
getResponceState
获取返回状态,返回值是一个整数,200表示请求成功,400表示服务器错误,404表示服务器上找不到相应的文件。
issucced(),用来判断是否返回成功
本节重点:
1、如何使用post方式提交数据
2、如何区别不同的请求
发送请求时设置tag,在回调函数里面获取请求的tag
3、设置Content-Type
Content-Type,内容类型。用于定义网络文件的类型和网页的编码,决定浏览器将以什么形式、什么编码读取这个文件。
设置格式: Content-Type: application/json; charset=utf-8
如果未指定 ContentType,默认为TEXT/HTML。
4、sendImmediate和send的区别
6. 释放连接
WebSocket协议
WebSocket protocol 是HTML5一种新的协议。它实现了浏览器与服务器全双工通信。实现浏览器与服务器的即时通讯。