原文地址:http://www.asp119.com/news/2009522181815_1.htm

从socket中接收数据的方法取决于你使用socket类型,Socket和XMLSocket都可以接收数据,但是两者实现方法有些不同,让我们先看看Socket类是如何做的。

正如前面所讲到的,Flash提供的socket通信方式是异步通信,也就是说仅仅创建socket连接并试图读取数据这是不可能的,read方法读取数据时并不会等待数据传输过来而立即返回,如果数据还没准备好而去读取数据会导致异常。

当数据准备好了时,socketData事件就会触发,通过注册该事件处理函数,当数据发送过来时就会触发,因此可通过该处理函数读取数据。

为了读取服务器发送来的数据,Socket类提供了一系列read方法来读取不同类型的数据,例如通过readByte( )方法读取一个字节,readUnsignedInt( )方法读取一个无符号整数,具体看下面的表格:

Table 24-1. Socket read methods for various datatypes

方法:返回类型描述字节数readBoolean():Boolean读取布尔型数据1readByte():int 读取一个字节数据1readDouble():Number读取IEEE 754 双精度浮点数 8readFloat():Number读取IEEE 754单精度浮点数 4readInt():in 读取32位整数 4readObject():* 读取AMF格式对象NreadShort():int 读取16位整数 2readUnsignedByte():uint读取无符号字节1readUnsignedInt():uint 读取无符号32位整数4readUnsignedShort():uint读取无符号16位整数 2readUTF():String读取UTF-8字符串n

还有两个方法没有在上面的表格里,它们是readBytes( )和readUTFBytes( ),readBytes( )方法没有返回值,它接受三个参数:

bytes

一个flash.util.ByteArray 实例填充读取的数据

offset

一个uint值指定读取数据的偏移量,默认为0

length

一个uint值表示读取的字节数,默认为0,表示所有的数据

readUTFBytes( )方法只接受一个参数,表示读取的UTF-8字节数,返回一个字符串。

下面的例子代码连接一个socket服务器并读取和显示服务器发送的数据:

package {

import flash.display.Sprite;

import flash.events.ProgressEvent;

import flash.net.Socket;

public class SocketExample extends Sprite {

private var socket:Socket;

public function SocketExample( ) {

socket = new Socket( );

// Listen for when data is received from the socket server

socket.addEventListener( ProgressEvent.SOCKET_DATA, onSocketData );

// Connect to the server

socket.connect( "localhost", 2900 );

}

private function onSocketData( event:ProgressEvent ):void {

trace( "Socket received " + socket.bytesAvailable + " byte(s) of data:" );

// Loop over all of the received data, and only read a byte if there

// is one available

while ( socket.bytesAvailable ) {

// Read a byte from the socket and display it

var data:int = socket.readByte( );

trace( data );

}

}

}

}

上面的例子中,如果socket服务器发送"Hello"字符串,则输出:

//Socket接收5字节的数据:

72

101

108

108

111

Socket对象接收的数据都是ASCII编码的文本,我们可以用readUTFBytes( )方法重新构造字符串,readUTFBytes( )方法需要知道有多少个字节需要转换,用bytesAvailable属性指定字节数:

var string:String = socket.readUTFBytes(socket.bytesAvailable);

XMLSocket类和Socket类基本类似,两者都要注册jian听器检测数据是否接收完毕,但是两者读取数据的方式是不同的。

当数据准备好时XMLSocket实例发出data事件,事件类型为flash.events.DataEvent.DATA ,它其中的data属性包含接收过来的数据。

从服务器返回的数据都是原始的数据,如果你希望以XML进行处理则需先把数据转换为XML 实例。

下面的代码例子用XMLSocket连接本地服务器,端口为2900,连接成功后,发送<test>消息给服务器,onData事件处理函数处理服务器返回的数据,返回数据为<response><test success='true'/></response>,注意到该事件的data属性的内容只是字符串数据,需用XML构造器转换位XML实例,最后通过E4X 语法输出XML:

package {

import flash.display.Sprite;

import flash.events.Event;

import flash.events.DataEvent;

import flash.net.XMLSocket;

public class SocketExample extends Sprite {

private var xmlSocket:XMLSocket;

public function SocketExample( ) {

xmlSocket = new XMLSocket( );

// Connect listener to send a message to the server

// after we make a successful connection

xmlSocket.addEventListener( Event.CONNECT, onConnect );

// Listen for when data is received from the socket server

xmlSocket.addEventListener( DataEvent.DATA, onData );

// Connect to the server

xmlSocket.connect( "localhost", 2900 );

}

private function onConnect( event:Event ):void {

xmlSocket.send( "<test/>" );

}

private function onData( event:DataEvent ):void {

// The raw string returned from the server.

// It might look something like this:

// <response><test success='true'/></response>

trace( event.data );

// Convert the string into XML

var response:XML = new XML( event.data );

// Using E4X, access the success attribute of the "test"

// element node in the response.

// Output: true

trace( response.test.@success );

}

}

}

收藏于 2011-05-24
来自于百度空间

ActionScript接收socket服务器发送来的数据的更多相关文章

  1. JAVA微信公众号网页开发 —— 接收微信服务器发送的消息

    WeixinMessage.java package com.test; import java.io.Serializable; /** * This is an object that conta ...

  2. Android—Volley:接收服务端发送的json数据乱码问题解决

    new JsonObjectRequest中重写方法parseNetworkResponse,内容如下: /** * 重写此方法不会导致乱码 */ @Override protected Respon ...

  3. socket 异步 发送 接收 数据

    Socket socketClints = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); / ...

  4. 使用post()方法以POST方式从服务器发送数据

    使用post()方法以POST方式从服务器发送数据 与get()方法相比,post()方法多用于以POST方式向服务器发送数据,服务器接收到数据之后,进行处理,并将处理结果返回页面,调用格式如下: $ ...

  5. java的nio之:java的bio流下实现的socket服务器同步阻塞模型和socket的伪异步的socket服务器的通信模型

    同步I/O模型的弊端===>每一个线程的创建都会消耗服务端内存,当大量请求进来,会耗尽内存,导致服务宕机 伪异步I/O的弊端分析===>当对Socket的输入流进行读取操作的时候,它会一直 ...

  6. 【RL-TCPnet网络教程】第19章 RL-TCPnet之BSD Socket服务器

    第19章      RL-TCPnet之BSD Socket服务器 本章节为大家讲解RL-TCPnet的BSD Socket,学习本章节前,务必要优先学习第18章的Socket基础知识.有了这些基础知 ...

  7. MSMQ向远程服务器发送消息----错误总结

    一:路径错误(Path)错误 如果向远程服务器发送消息,请使用格式名的形式,如: FormatName:Direct=TCP:121.0.0.1\\private$\\queueFormatName: ...

  8. Java后台创建Socket服务接收硬件终端发送的数据

    最近项目中有遇到后台接收硬件终端发送的数据并解析存储的需求,代码总结如下(有时间再来一一讲解,最近比较忙): @Override public void start() { ExecutorServi ...

  9. [C#参考]利用Socket连续发送数据

    这个例子只是一个简单的连续发送数据,接收数据的DEMO.因为最近做一个项目,要求robot连续的通过Socket传回自己的当前的位置坐标,然后客户端接收到坐标信息,在本地绘制地图,实时显示robot的 ...

随机推荐

  1. ORACLE解锁数据库用户

    the account is locked解决办法: 1.进入sqlplus sqlplus "/as sysdba" 2.解锁: alter user hpmng account ...

  2. 【原创】不用封装jar包 直接引入工程使用的方法(类似android的 is Library功能)

    1.制作lib工程,这里我简单制作一个测试类 2.eclipse中 java Project工程引入方法 2.1.新建个java工程,在属性配置中选择 "Java Build Path&qu ...

  3. CGContextRef一点用法

      quartz 是主要的描画接口,支持基于路径的描画.抗锯齿渲染.渐变填充模式.图像.颜色.坐标空间变换.以及PDF 文档的创建.显示.和分析.UIKit 为Quartz 的图像和颜色操作提供了Ob ...

  4. Facade 模式

    在软件系统开发中经常回会遇到这样的情况,你实现了一些接口(模块),而这些接口(模块)都分布在几个类中(比如 A和 B.C.D) :A中实现了一些接口,B 中实现一些接口(或者 A代表一个独立模块,B. ...

  5. Invalid project description overlaps the location of another project [android]

    解决办法: 1.将工程放到其他目录下,然后执行Android工程的导入,导入时可以选择“Copy projects into workspace”: 2.不用Android工程导入,而用普通的工程导入 ...

  6. asp.net中后台javaScrip的使用

    ClientScriptManager csm = Page.ClientScript;        //Script标记靠近<form>标签        //csm.Register ...

  7. Joomla插件汉化小程序

    这两天在搞joomla插件,在看peter的视频,在此谢过他了.看到它汉化插件那个视频.反正闲着无聊,就写了一个Java小程序,方便使用joomla的人汉化插件.这个程序的方法很简单,你只要先运行ou ...

  8. Asp.Net使用异步性能就提升吗

      Asp.Net异步编程 随着.Net4.5的推出,一种新的编程方式简化了异步编程,在网上时不时的也看到各种打着Asp.Net异步编程的口号,如何提高性能,如何提高吞吐率! 好多文章都说得不清楚,甚 ...

  9. Python Tutorial 学习(八)--Errors and Exceptions

    Python Tutorial 学习(八)--Errors and Exceptions恢复 Errors and Exceptions 错误与异常 此前,我们还没有开始着眼于错误信息.不过如果你是一 ...

  10. 转:2014 年 15 款新评定的最佳 PHP 框架

    原文来自于:http://blog.jobbole.com/59999/ 原文出处: codegeekz   译文出处:oschina   欢迎分享原创到伯乐头条 通常,框架都会被认为是帮助开发者快速 ...