關於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網路程式設計http,udp,tcp,socket
先學習概念 來自仗劍量天的部落格 socket 套接字 用於描述IP地址和埠。 套接字分為 1. tcp 流式套接字 2. udp 資料報式套接字 socket是對tcp/ip協議的封裝和應用,它本身並不是協議,而是一個呼叫介面(API),也可以說,
java網路程式設計:10、基於TCP的socket程式設計(三)緩衝流、flush方法、關閉流
宣告:本教程不收取任何費用,歡迎轉載,尊重作者勞動成果,不得用於商業用途,侵權必究!!! 文章目錄 一、使用緩衝流、註釋流的關閉—帶來的效果 二、使用flush方法—帶來的效果 三、關閉流—帶來的效果 四、系列文章(java網路程式設計) 上篇講了基於tcp的程式設計
java網路程式設計:9、基於TCP的socket程式設計(二)伺服器端迴圈監聽接收多個客戶端_多執行緒伺服器程式
宣告:本教程不收取任何費用,歡迎轉載,尊重作者勞動成果,不得用於商業用途,侵權必究!!! 文章目錄 一、核心程式碼編寫 1、伺服器端程式的編寫 2、客戶端程式的編寫 3、測試列印輸出 二、系列文章(java網路程式設計) 上篇講了基於tcp的程式設計的一些基礎知識
java網路程式設計:8、基於TCP的socket程式設計(一)簡單的socket通訊_一個客戶端
宣告:本教程不收取任何費用,歡迎轉載,尊重作者勞動成果,不得用於商業用途,侵權必究!!! 文章目錄 一、基於tcp的程式設計,就好像用電話進行交談一樣 二、在java中用於程式設計網路程式的類 三、套接字 + (輸出、輸入流) 1、伺服器程式編寫基本步驟: 2、客戶端程式
python中網路程式設計總結(udp,tcp)
一、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程式設計的UDP與TCP,應用在哪些地方
隨著網路技術飛速發展,網速已不再是傳輸的瓶頸,UDP協議以其簡單、傳輸快的優勢,在越來越多場景下取代了TCP,如網頁瀏覽、流媒體、實時遊戲、物聯網。1,網速的提升給UDP穩定性提供可靠網路保障CDN服務商Akamai(NASDAQ: AKAM)報告從2008年到2015年7年
TCP,UDP協議下的socket通信
() tcp write close 結構體 設置 In cep acc TCP通信流程 Server端: 創建套接字:socket( ) 創建sockaddr_in結構體變量,並設置相關參數 將套接字與IP、端口綁定:bind( ) 使套接字處於監聽狀態,等待Client
網路程式設計之網路通訊是什麼——UDP與TCP的區別
首先,補充一下其他的知識,會更加方便了解。 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):TCP和UDP
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