cocos2d-x网络编程

在这里我整理了以往自已用的一些关于HTTP和Socket编程资料,当然也有一些自已对网络编程的理解

首先说说HTTP与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如下:

我们在一个类里边定义两个方法,一个是请求,一个是响应

再看方法的实现

这里我用俩个tag值来区分是用get还是post,我们可以看到,这俩种方式的异同:

1>,get方法是将数据直接接到URL的后面,post方法把URL和数据分开了

2>,俩个方法请求完服务器后都会回调一个方法,并且不管请求成不成功,服务器都将返回一个JSON串

我们再看这个回调方法:

通过服务器返回的JSON串,我们可以确定是否请求成功,总的来说,HTTP就是一个请求与响应的过程

Socket中TCP与UDP编程

TCP连接流程图:

1>,创建套接字(socket)

SOCKET socket(int af,int type,int protocol)

af:指定地址族,(TCP,IP)协议只能是AF_INET

type:指定socket类型(流式还是数据报式)

protocol:与特定地址族的协议,如果为0,系统会自动选择一个合适的协议

如果socket调用成功,它会返回一个新的SOCKET套接字,如果失败返回一个错误

2>,将套接字绑定到一个本地地址的端口上(bind)

int bind(SOCKET s,const struct sockaddr FAR * name,int namelen)

s:要绑定的套接字

name:指定该套接字的本地地址信息,是一个指向sockaddr的指针变量

namelen:制定该地址结构的长度

3>,将套接字设置为监听模式,接收客户端请求(listen)

int listen(SOCKET s,int backlog)

s:待监听的套接字

backlog:等待连接的队列的最大长度

4>,等待客户请求,当有请求时,接受连接请求,返回一个新的套接字对应此次连接(accept)

SOCKET accept(SOCKET s,struct sockaddr FAR * addr,int FAR * addrlen)

s:已经被监听状态的套接字

addr:指向一个缓冲区的指针,用来接收连接实体的地址(连接客户端的IP地址和端口信息)

addrlen:指向一个整形的指针,包括地址信息的长度

5>,用返回的新生成的套接字和客户端进行通信(send/recv)

send函数:

int send(SOCKET s,const char FAR * buf,int len,int flags)

s:已建立的套接字

buf:指向一个缓冲区,该缓冲区包含要传递的数据

len:数据的长度

flags:0

recv函数:

int recv(SOCKET s,char FAR * buf,int len,int flags)

s:建立连接准备接收数据的那个套接字

buf:保存接收的的数据

len:缓冲区长度

flags:影响函数调用时的行为

6>,继续待待另外的客户请求

7>,关闭套接字

时间: 2024-11-06 03:53:06

cocos2d-x网络编程的相关文章

【独立开发者er Cocos2d-x实战 013】Cocos2dx 网络编程实战之星座运势

本篇文章主要内容:jsoncpp的使用,Cocos2dx网络编程,聚合数据星座运势接口使用. 1.jsoncpp使用: jsoncpp的生成请参考博客:Jsoncpp使用详解以及链接问题解决 2.聚合数据星座运势接口使用: 我们先登上聚合数据官网,申请相关的数据后,就可以得到APPKEY等信息,调试如下: 3.Cocos2dx网络编程:源码下载请点击(源码中包括jsoncpp文件) #include "HelloWorldScene.h" #include "CocoStud

【独立开发人员er Cocos2d-x实战 013】Cocos2dx 网络编程实战之星座运势

学习cocos2d-x和cocos creator的圈子:cocos2d-x:436689827    cocos creator:124727696 本篇文章主要内容:jsoncpp的使用,Cocos2dx网络编程,聚合数据星座运势接口使用. 1.jsoncpp使用: jsoncpp的生成请參考博客:Jsoncpp使用具体解释以及链接问题解决 2.聚合数据星座运势接口使用: 我们先登上聚合数据官网.申请相关的数据后,就能够得到APPKEY等信息,调试例如以下: 3.Cocos2dx网络编程:源

cocos2dx 网络编程(CCHttpRequest和CURL两个方式)

转自:http://blog.csdn.net/sg619262284/article/details/20144087 在使用之前需要设置一些参数:参考:http://blog.csdn.net/wangbin_jxust/article/details/9632771 在完成上面的操作后,还需要在链接器的输入里面添加一个参数pthreadVCE2.lib: 使用CCHttpRequest方法实现:(异步连接) void HallView::Qudian(){ //网络异步连接方法 cocos

cocos2dx Http网络编程

转自:http://blog.csdn.net/wangbin_jxust/article/details/9632771,http://blog.csdn.net/wangbin_jxust/article/details/9707873 联网游戏开发中,经常遇到http编程,接下来就分三次对cocos2dx的网络编程进阶. 本博文中先介绍建立基本的http通信并得到返回信息. 1.创建cocos2dx工程. 2.项目引用外部库. 如果要使用cocos2dx的CCHttpClient来进行网络

C#网络编程技术FastSocket实战项目演练

一.FastSocket课程介绍 .NET框架虽然微软提供了socket通信的类库,但是还有很多事情要自己处理,比如TCP协议需要处理分包.组包.粘包.维护连接列表等,UDP协议需要处理丢包.乱序,而且对于多连接并发,还要自己处理多线程等等.本期分享课程阿笨给大家带来的是来源于github开源Socket通信中间件:FastSocket,目的就是把大家从繁琐的网络编程技术中彻底地解放和释放出来. 阿笨只想安安静静的学习下网络编程技术Socket后,将学习的成果直接灵活的运用到自己的实际项目中去.

网络编程 -- RPC实现原理 -- RPC -- 迭代版本V1 -- 本地方法调用

网络编程 -- RPC实现原理 -- 目录 啦啦啦 V2--RPC -- 本地方法调用:不通过网络 入门 1. RPCObjectProxy rpcObjectProxy = new RPCObjectProxy(new LocalRPCClient()); : 绑定目标对象 2. IUserService userService = (IUserService) rpcObjectProxy.create(IUserService.class); :返回代理类 3. List<User> u

C#网络程序设计(1)网络编程常识与C#常用特性

    网络程序设计能够帮我们了解联网应用的底层通信原理!     (1)网络编程常识: 1)什么是网络编程 只有主要实现进程(线程)相互通信和基本的网络应用原理性(协议)功能的程序,才能算是真正的网络编程. 2)网络编程的层次 现实中的互联网是按照"TCP/IP分层协议栈"的体系结构构建的,因此程序员必须搞清楚自己要做的是哪个层次上的编程工作. TCP/IP协议体系的实现情况: 其中,网络接口层已经被大多数计算机生产厂家集成在了主板上,也就是经常所说的网卡(NIC).windows操

9. 网络编程:

网络编程: 端口: 物理端口: 逻辑端口:用于标识进程的逻辑地址,不同进程的标识:有效端口:0~65535,其中0~1024系统使用或保留端口. java 中ip对象:InetAddress. import java.net.*; class  IPDemo{ public static void main(String[] args) throws UnknownHostException{ //通过名称(ip字符串or主机名)来获取一个ip对象. InetAddress ip = InetA

物联网网络编程、Web编程综述

本文是基于嵌入式物联网研发工程师的视觉对网络编程和web编程进行阐述.对于专注J2EE后端服务开发的童鞋们来说,这篇文章可能稍显简单.但是网络编程和web编程对于绝大部分嵌入式物联网工程师来说是一块真空领域. 的确,物联网研发应该以团队协作分工的方式进行,所以有嵌入式设备端.网关.web前端.APP.后端开发等专属岗位.作为系统架构师,自然需要掌握各种岗位的关键技术.作为嵌入式工程师,掌握网络编程.web编程,能够极大地拓展自己的视野和架构思维,能够主动地对系统的各种协议和应用场景提出优化的见解

linux网络编程-(socket套接字编程UDP传输)

今天我们来介绍一下在linux网络环境下使用socket套接字实现两个进程下文件的上传,下载,和退出操作! 在socket套接字编程中,我们当然可以基于TCP的传输协议来进行传输,但是在文件的传输中,如果我们使用TCP传输,会造成传输速度较慢的情况,所以我们在进行文件传输的过程中,最好要使用UDP传输. 在其中,我们需要写两个程序,一个客户端,一个服务端,在一个终端中,先运行服务端,在运行客户端,在服务端和客户端都输入IP地址和端口号,注意服务端和客户端的端口号要相同,然后选择功能,在linux