1. 程式人生 > >關於cocos2dx網路程式設計http,udp,tcp,socket

關於cocos2dx網路程式設計http,udp,tcp,socket

先學習概念

來自仗劍量天的部落格

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));

相關推薦

關於cocos2dx網路程式設計httpudptcpsocket

先學習概念 來自仗劍量天的部落格 socket 套接字 用於描述IP地址和埠。 套接字分為 1. tcp 流式套接字 2. udp 資料報式套接字 socket是對tcp/ip協議的封裝和應用,它本身並不是協議,而是一個呼叫介面(API),也可以說,

java網路程式設計:10、基於TCPsocket程式設計(三)緩衝流、flush方法、關閉流

宣告:本教程不收取任何費用,歡迎轉載,尊重作者勞動成果,不得用於商業用途,侵權必究!!! 文章目錄 一、使用緩衝流、註釋流的關閉—帶來的效果 二、使用flush方法—帶來的效果 三、關閉流—帶來的效果 四、系列文章(java網路程式設計) 上篇講了基於tcp的程式設計

java網路程式設計:9、基於TCPsocket程式設計(二)伺服器端迴圈監聽接收多個客戶端_多執行緒伺服器程式

宣告:本教程不收取任何費用,歡迎轉載,尊重作者勞動成果,不得用於商業用途,侵權必究!!! 文章目錄 一、核心程式碼編寫 1、伺服器端程式的編寫 2、客戶端程式的編寫 3、測試列印輸出 二、系列文章(java網路程式設計) 上篇講了基於tcp的程式設計的一些基礎知識

java網路程式設計:8、基於TCPsocket程式設計(一)簡單的socket通訊_一個客戶端

宣告:本教程不收取任何費用,歡迎轉載,尊重作者勞動成果,不得用於商業用途,侵權必究!!! 文章目錄 一、基於tcp的程式設計,就好像用電話進行交談一樣 二、在java中用於程式設計網路程式的類 三、套接字 + (輸出、輸入流) 1、伺服器程式編寫基本步驟: 2、客戶端程式

python中網路程式設計總結(udptcp

一、udp使用者資料報協議(寫信的模型:在通訊開始,不需要建立相關的連線,只需要傳送資料即可,類似於生活中的寫信)(不安全:發的訊息可能會丟,對方不會請求再發一遍) 1.ipv4:_ _ _ ._ _ _ . _ _ _ ._ _ _ 192.168.1.1 注:192.168 是代表的同一

嵌入式Linux網路程式設計UDP迴圈伺服器sendto()recvfrom()

文章目錄 1,UDP迴圈伺服器模型: 2,UDP的使用場景 3,UDP資料傳送和接受sendto()、recvfrom() 4,UDP迴圈伺服器示例(可同時連線多個客戶端) 4.1,標頭檔案 net.h 4.2,客戶端程式碼cl

Socket程式設計UDPTCP應用在哪些地方

隨著網路技術飛速發展,網速已不再是傳輸的瓶頸,UDP協議以其簡單、傳輸快的優勢,在越來越多場景下取代了TCP,如網頁瀏覽、流媒體、實時遊戲、物聯網。1,網速的提升給UDP穩定性提供可靠網路保障CDN服務商Akamai(NASDAQ: AKAM)報告從2008年到2015年7年

TCPUDP協議下的socket通信

() tcp write close 結構體 設置 In cep acc TCP通信流程 Server端: 創建套接字:socket( ) 創建sockaddr_in結構體變量,並設置相關參數 將套接字與IP、端口綁定:bind( ) 使套接字處於監聽狀態,等待Client

網路程式設計網路通訊是什麼——UDPTCP的區別

      首先,補充一下其他的知識,會更加方便了解。      OSI模型:是ISO(國際標準化組織)組織在1985年研究的網路互聯模型,推薦所有公司使用這個規範來控制網路。這樣所有公司都有相同的規範,就能互聯了。  

JavaSE基礎(day21)(1)網路程式設計的常識 (2)基於tcp協議的程式設計模型(3)tcp協議和udp協議的比較 (4)基於udp協議的程式設計模型

默寫: 1.畫圖題 畫出所學IO流類之間的關係。 2.程式設計題 使用實現繼承的方式啟動一個執行緒,在該執行緒中每隔一秒列印一次當前系統時間,主執行緒等待5秒之後停止子執行緒。 今天內容: (1)網路程式設計的常識 (2)基於tcp協議的程式設計模型 (3)tcp協議和udp協議

Java網路程式設計(2):TCPUDP

1、多執行緒“服務端-客戶端”   TCP客戶端使用Socket來連線伺服器和與伺服器通訊。以下為在主執行緒中將使用者輸入傳送給服務端,在建立的執行緒中將服務端發回的資料輸出來: import java.net.*; import java.io.*; class Cl

Linux網路程式設計【三】:TCP伺服器多程序和多執行緒(http訪問)版本

為了讓伺服器同時接受多個客戶端訪問,所以需要多程序或者多執行緒 多程序版本: #include<unistd.h> #include<stdio.h> #include<stdlib.h> #include<sys/types.h

網路程式設計io總結區分。阻塞非阻塞非同步同步

借鑑提煉自http://blog.csdn.net/historyasamirror/article/details/5778378 在網路程式設計中,肯定會有讀寫io的問題。這時候就會有了五種io模型。取自unix network  programing 五種模型分別是,

【Linux】Linux網路程式設計(含常見伺服器模型下篇)

高階巢狀字函式 前面介紹的一些函式(read、write等)都是網路程式裡最基本的函式,也是最原始的通訊函式。下面介紹一下幾個網路程式設計的高階函式: recv()函式 int recv(int s, void *buf, int len, unsigned i

C# 網路程式設計“由於目標機器積極拒絕無法連線。。”的原因

前兩天做一個遠端鍵盤的小東西,本機測試的時候還行,但是放到另一個機子上就出問題了。 一直連不上提示的訊息是“由於目標機器積極拒絕,無法連線。。。“百度了許久,各種版本的說法。 後來看到了監聽地址和訪問地址不一樣的時候才發現。 原來為了方便本機測試監聽器TcpListener

【Linux】Linux網路程式設計(含常見伺服器模型上篇)

基本資料結構介紹 Linux系統是通過提供巢狀字(socket)來進行網路程式設計的。網路程式通過socket和其他幾個函式的呼叫,會返回一個通用的檔案描述符,使用者可以將這個描述符看成普通的檔案的描述符來操作,這就是Linux的裝置無關性的好處。使用者可以通過向描述符的讀

網路程式設計:server伺服器轉發訊息多個客戶端實現群聊

依然直接上圖: 下面是程式碼實現: Client.java <span style="font-size:18px;">import java.io.IOException; impor

談談網路程式設計中應用層(基於TCP/UDP)的協議設計

 對於初涉網路程式設計的開發人員來說,在通訊協議的設計上一般會有所困惑。一般的網路程式設計書籍上也較少涉及這方面的內容。估計是覺得太簡單了。這塊確實是不難,但如果不瞭解,又很容易出簍子或者繞彎路。下面我就來談談基於TCP/UDP的協議設計。     1、基於TCP的協議

Java之HTTP網路程式設計(一):TCP/SSL網頁下載

目錄 一、簡介:HTTP程式設計     1、HTTP系統設計     2、HTTP客戶端工作過程     3、HTTP服務端工作過程 二、基於TCP Socket的HTTP網頁下載 三、基於SSL Socke

Windows網路程式設計(一):TCP/IP協議

概述 這個協議是一個四層協議: 應用層,主要協議有HTTP、FTP等 傳輸層,主要協議有TCP、UDP等 網路層,主要協議有IP等 鏈路層,主要協議有ICMP等 下層中的協議總是為上層中的協議服務的,比如說應用層的HTTP、FTP協議都是基於T