Flash as3 socket编程入门

栏目: JavaScript · 发布时间: 6年前

内容简介:所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过"套接字"向网络发出请求或者应答网络请求。AS3中我们一般使用的是基于TCP的流式socket。Socket类通过流式socket是以字节流的形式传输信息的,跟水流一样,没有边界,要做什么操作,传了什么内容,哪里是事情的开头,哪里又是事情的结尾,我们完全是不知道的,所以我们一般在发送方需要对要传输的数据一定的格式,而接收方则按同样的规则解析这种格式,也就是我们常说的封包和拆包。也就是说我们处理字节流是以包为单

什么是socket?

所谓socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄。应用程序通常通过"套接字"向网络发出请求或者应答网络请求。AS3中我们一般使用的是基于TCP的流式socket。

TCP是一种流协议(stream protocol)。这就意味着数据是以字节流的形式传递给接收者的,没有固有的"报文"或"报文边界"的概念。

TCP是通过什么方式保证传输数据的可靠性的?

1、 应用数据被分割成TCP认为最适合发送的数据块。

2、 当TCP发出一个段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。

3、 当TCP收到发自TCP连接另一端的数据,它将发送一个确认。这个确认不是立即发送,通常将推迟几分之一秒(一般200毫秒左右)。

4、 TCP将保持它首部和数据的检验和。这是一个端到端的检验和,目的是检测数据在传输过程中的任何变化。如果收到段的检验和有差错, TCP将丢弃这个报文段和不确认收到此报文段(希望发端超时并重发)。

5、 既然TCP报文段作为IP数据报来传输,而IP数据报的到达可能会失序,因此TCP报文段的到达也可能会失序。如果必要, TCP将对收到的数据进行重新排序,将收到的数据以正确的顺序交给应用层。

6、 既然IP数据报会发生重复, TCP的接收端必须丢弃重复的数据。

7、 TCP还能提供流量控制。TCP连接的每一方都有固定大小的缓冲空间。TCP的接收端只允许另一端发送接收端缓冲区所能接纳的数据,这将防止较快主机致使较慢主机的缓冲区溢出,比如,发送方要发送8Kb的数据到接收端,但接收端的缓冲区已经只剩下2K的空间了,那么发送方最多只能发2Kb的数据,那么这时候不得不把数据拆分发送。而为了防止网络的拥塞现象,TCP提出了一系列的拥塞控制机制与算法,比如Nagle算法等,这些也可以看做是产生半包,黏包现象的其中一方面因素吧。

flash如何通过socket和服务器建立连接?

Socket类通过 Socket.connect(ip, host) 方法并监听网络连接时间消息。因为Flash Socket编程是一个异步的过程, connect() 方法不会等到一个连接完成后再执行下一行代码的执行。所以在尝试一个新的Socket连接的时候我们最好先添加一个连接事件监听器( socket.addEventListener( Event.CONNECT, onConnect ); )。

什么是封包和拆包?

流式socket是以字节流的形式传输信息的,跟水流一样,没有边界,要做什么操作,传了什么内容,哪里是事情的开头,哪里又是事情的结尾,我们完全是不知道的,所以我们一般在发送方需要对要传输的数据一定的格式,而接收方则按同样的规则解析这种格式,也就是我们常说的封包和拆包。也就是说我们处理字节流是以包为单位进行处理的。 一般是 包头|Header|+包体|Body|+包尾|End| 组成,有时候包尾部分也直接归入Body部分,形成 |Header|+|Body| 的结构。 包尾部分的信息一般用于校验包的完整性或者合法性等。 包头长度,信息字段的位置一般都是固定的,必须包含的字段一般有“包的长度(packetLen)”和“操作码(cmd)”,提供长度是为了方面我们解析数据包,而提供操作码是为了让程序知道,该条信息是要做什么操作。除以上两个字段,其他字段根据需要增减。

Socket如何处理数据?

既然上面我们人为的给数据进行了封包,那么我们处理数据就是以包为单位进行处理的。

1、 因为包头|Header|长度固定,当收到数据时,先检验缓冲区有效数据长度,是否大于等于包头长度,如果小于包头长度,则说明数据不够,则继续等待下一次数据的到来,如果大于包头长度,则读取包头长度的数据,并按一定的格式解析包头数据,从包头中获取到包的长度(packetLen),此时包头处理基本完毕。

2、 根据包头读取到的packetLen,从而计算出包体部分的数据长度(比如bodyLen),再判断缓存区剩余数据长度是否大于等于bodyLen,如果不是,同样等待,如果是,则从缓存区读出包体部分,进而按照一定的格式读取里面的数据(例如readInt(),readShort()…);此时包数据基本读取完毕!

3、 上面我们说过网络中的字节流没有界线的,因此我们该知道每次到达的数据,也就是缓冲区的数据,有可能不止一个数据包,因此需要循环执行 1,2步。


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

引爆流行

引爆流行

[美] 马尔科姆·格拉德威尔 / 钱清、覃爱冬 / 中信出版社 / 2002-7 / 18.00元

马尔科姆·格拉德威尔以社会上突如其来的流行风潮研究为切入点,从一个全新的角度探索了控制科学和营销模式。他认为,思想、行为、信息以及产品常常会像传染病爆发一样,迅速传播蔓延。正如一个病人就能引起一场全城流感;如果个别工作人员对顾客大打出手,或几位涂鸦爱好者管不住自己,也能在地铁里掀起一场犯罪浪潮;一位满意而归的顾客还能让新开张的餐馆座无虚席。这些现象均属“社会流行潮”,它爆发的那一刻,即达到临界水平......一起来看看 《引爆流行》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

SHA 加密
SHA 加密

SHA 加密工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具