资源描述:
《从socket服务器读数据》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、从Socket服务器读数据解决方法: 对于Socket实例,先收到socketData事件,然后调用如下两个方法的一个,比如,readByte()或者readInt(),在事件控制器中确定不会去读过去的bytesAvailable. 对于XMLSocket实例,先收到data事件,然后解析从事件控制器内部装载的XML数据.讨论: 从一个socket连接接收的数据依赖于你使用的Socket的类型.socket和XMLSocket都可以从服务器接受到数据,但是它们处于不同重量级的技术.让我们在讨
2、论XMLSocket之前先关注下Socket类. 我都知道socket在Flash中是一个异步的行为.因此,它就不能简单的创建一个Socket连接,然后就立刻尝试去读取数据.read方法不能等到从服务器传过来数据之后在返回.换句话说,你只能在客户端从服务器载入所有数据之后才可以读取数据.在数据可用之前读数据会产生一个错误. 通过socketData事件广播到Socket实例,这样我们就可以知道什么时候数据可以被读取.那么我们要为socketData事件添加一个事件监听器,任何时候只要有新的数据从
3、一个socket服务器发送过来,都会触发事件控制器.在事件处理器的内部我们写入我们要执行的代码去读取和处理收到的数据. 从一个前端服务器读取数据,Socket类为我们提供了许多不同的方法,这些方法依赖于你所读得数据类型.例如,你可以通过readByte()方法读一个byte数据,或者通过一个使用readUnsignedInt()方法去读一个无符号整数.下面这个表列出来能够从服务器读取的数据类型,返回值,和read方法每次读入的字节数.Table:Socketreadmethodsforvarious
4、datatypes方法:返回值类型描述字节数readBoolean():Boolean从Socket读取一个Boolean值.1readByte():int从Socket读取一个byte值.1readDouble():Number从Socket读取一个IEEE754双精度浮点数.8readFloat():Number从Socket读取一个IEEE754单精度浮点数.4readInt():int从Socket读取一个有符号32-bit整数值.4readObject():*从Socket读取一个AMF-en
5、coded对象.nreadShort():int从Socket读取一个有符号16-bit整数值.2readUnsignedByte():uint从Socket读取一个无符号字节.1readUnsignedInt():uint从Socket读取一个无符号32-bit整数4readUnsignedShort():uint从Socket读取一个无符号16-bit整数.2readUTF():String从Socket读取一个一个UTF8字符串.n 有两个额外的方法没有在上面这个表中描述.它们分别是readB
6、ytes()和readUTFBytes().readBytes()方法只可以让socket读数据但不能返回一个值,并且该方法需要3个参数:bytes: 一个flash.util.ByteArray实例读取从socket中收到的数据.offset: 一个uint值,指定从什么位置开始读取socket中收到数据的偏移量.默认值为0.length: 一个uint值,用于指定读取bytes的数量.默认值为0,意思就是说将所有的可用的数据都放入ByteArray中. 另一个readUTFBytes
7、()方法,只需要一个长度参数用于指定UTF-8字节的读入数量,并且该方法会将所有读入的字节码转换成为字符串类型.注意:在从一个Socket读数据之前,首先要判断bytesAvailable的属性.如果你不知道要读入的数据类型是什么就去读数据的话,将会产生一个错误(flash.errors.EOFError). 下面的例子代码连接了一个socket服务器,读取并显示每次从服务器发来的数据.package{importflash.display.Sprite;importflash.events.Pro
8、gressEvent;importflash.net.Socket;publicclassSocketExampleextendsSprite{ privatevarsocket:Socket; publicfunctionSocketExample(){ socket=newSocket(); //Listenforwhendataisreceivedfromthesocketserver soc