cocos2d-x网络编程

cocos2d-x网络编程,第1张

概述转载:http://www.cnblogs.com/Mdh1991/p/4095186.html 在这里我整理了以往自已使用的一些关于HTTP和Socket编程资料,当然也有一些自已对网络编程的理解。 首先说说HTTP与Socket概念性的一些认识: Socket通常称为“套接字”,用于描述IP地址和端口。 套接字类型分为: 1> 流式套接字:提供面向连接,可靠的数据传输服务,数据无差错,无重复的

转载:http://www.cnblogs.com/Mdh1991/p/4095186.html

在这里我整理了以往自已使用的一些关于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)

1 SOCKETsocket( int af, type,monospace!important; Font-size:1em!important; min-height:inherit!important">protocol)

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

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

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

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

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

bind(SOCKETs,conststructsockaddrFAR*name,monospace!important; Font-size:1em!important; min-height:inherit!important">namelen)

s:要绑定的套接字。

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

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

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

Listen(SOCKETs,monospace!important; Font-size:1em!important; min-height:inherit!important">backlog)

s:待监听的套接字。

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

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

SOCKETaccept(SOCKETs,monospace!important; Font-size:1em!important; min-height:inherit!important">sockaddrFAR*addr,monospace!important; Font-size:1em!important; min-height:inherit!important">FAR*addrlen)

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

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

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

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

send函数:

send(SOCKETs,153)!important">constcharFAR*buf,monospace!important; Font-size:1em!important; min-height:inherit!important">len,monospace!important; Font-size:1em!important; min-height:inherit!important">flags)

s:已建立的套接字。

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

len:数据的长度。

flags:0


recv函数:

recv(SOCKETs,serif; Font-size:14px; line-height:24px">

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

buf保存接收的的数据

len缓冲区长度

flags影响函数调用时的行为

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

7> 关闭套接字

总结

以上是内存溢出为你收集整理的cocos2d-x网络编程全部内容,希望文章能够帮你解决cocos2d-x网络编程所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1029949.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)