关于cocos2dx网络编程http,udp,tcp,socket

    xiaoxiao2021-03-25  108

    先学习概念

    来自仗剑量天的博客

    socket 套接字 用于描述IP地址和端口。 套接字分为 1. tcp 流式套接字 2. udp 数据报式套接字

    socket是对tcp/ip协议的封装和应用,它本身并不是协议,而是一个调用接口(API),也可以说,TPC/IP协议是传输层协议,主要解决数据如何在网络中传输。 HTTP协议也叫超文本传输协议 HTTP是一个无连接,无状态连接的应用层协议,由请求-响应构成,是标准的C/S模型,主要解决如何包装数据。 HTTP连接使用的是“请求-响应”的方式,不仅在请求时需要先建立连接,而且需要客户端向服务器发出请求后,服务器端才能回复数据。

    HTTP连接与Socket连接 Socket连接:服务器就可以直接将数据传送给客户端,直到双方断开连接。 HTTP连接:服务器需要等到客户端发送一次请求后才能将数据传回给客户端,客户端定时向服务器端发送连接请求,不仅可以保持在线,同时也是在“询问”服务器是否有新的数据,如果有就将数据传给客户端。

    讲了那么多概念性的东西后,我们看这俩种方式的具体使用。 先我们看HTTP协议的用法: 常用的两种HTTP通信方式有get和post,我们来看看这俩种方式有什么异同 1> get是从服务器上获取(查询)数据,post是向服务器传送(修改)数据; 2> get传送的数据量较小,不能大于2KB,post传送的数据量较大,一般认为不受限; 3> get安全性非常低,通常是逃不过像Wireshark这类功能强大的抓包工具的,但执行效率比较好;post安全性相对来说就比较好了;

    建议:在做数据查询时用get方式,而在做数据添加,修改或删除时用post方式

    demo如下: 环境:cocos2d-lua 3.13,mac10.11.6,xcode8.2.1,

    // // MyNetWork.cpp // Slither // // Created by Mybo on 17/3/8. // // #include "MyNetWork.hpp" #include "network/HttpRequest.h" #include "network/HttpResponse.h" #include "network/HttpClient.h" using namespace cocos2d::network; MyNetWork* MyNetWork::getInstance(){ static MyNetWork* _instance = nullptr; if (_instance == nullptr) { _instance = new MyNetWork; } return _instance; } void MyNetWork::onHttpRequest(const std::string& url,HttpRequest::Type type,SEL_HttpResponse pSelector){ auto request = new HttpRequest(); request->setUrl(url); request->setRequestType(type); printf("onHttpRequest"); request->setResponseCallback(this,pSelector ); HttpClient::getInstance()->send(request); request->release(); } // // MyNetWork.hpp // Slither // // Created by Mybo on 17/3/8. // // #ifndef MyNetWork_hpp #define MyNetWork_hpp #include <stdio.h> #include "cocos2d.h" USING_NS_CC; #include "extensions/cocos-ext.h" #include "network/HttpClient.h" USING_NS_CC; USING_NS_CC_EXT; using namespace network; class MyNetWork :public Ref { public: static MyNetWork * getInstance(); void onHttpRequest(const std::string& url,HttpRequest::Type type,SEL_HttpResponse pSelector); // void onHttpRequestCompleted(Node* sender,void* data); //Http Response Callback }; #endif /* MyNetWork_hpp */

    下面是回调方法

    void OneBody::onHttpRequestCompleted(cocos2d::network::HttpClient *sender, cocos2d::network::HttpResponse *response) { if (!response) { return; } if (0 != strlen(response->getHttpRequest()->getTag())) { log("%s completed",response->getHttpRequest()->getTag()); } long statusCode = response->getResponseCode(); char statusString[64] = {}; sprintf(statusString, "HTTP Status Code: %ld, tag = %s",statusCode,response->getHttpRequest()->getTag()); log("response code: %ld",statusCode); if (!response->isSucceed()) { log("response failed"); log("error buffer: %s",response->getErrorBuffer()); return; } std::vector<char>* buffer = response->getResponseData(); printf("Http Test, dump data: "); for (unsigned int i = 0 ; i < buffer->size();i++) { printf("%c",(*buffer)[i]); } printf("\n"); }

    调用方式

    MyNetWork::getInstance()->onHttpRequest("url地址",HttpRequest::Type::GET,httpresponse_selector(OneBody::onHttpRequestCompleted));
    转载请注明原文地址: https://ju.6miu.com/read-11274.html

    最新回复(0)