Cocos2d中的网络通信协议(Socket通讯,http协议,WebSocket协议)

来源:互联网 发布:志华软件 编辑:程序博客网 时间:2024/05/17 06:20


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<char>*getResponseData();

   获取请求返回的数据:

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一种新的协议。它实现了浏览器与服务器全双工通信。实现浏览器与服务器的即时通讯。

0 0
原创粉丝点击