1.4 AS3 与 Java 通信
Action Script 3 最后是传说中的as3了,这里我们用Socket中的writeUTFBytes();来写字符串。首先来看fla版的
var SERVER_PORT:Number = 10086; var SERVER_IP:String = "127.0.0.1"; var conn:Socket = new Socket(SERVER_IP,SERVER_PORT); conn.addEventListener("connect",socketConnect); conn.addEventListener("socketData",socketData); function socketConnect(event:Event){ event.target.writeUTFBytes("hello world"); event.target.writeByte(10); event.target.flush(); } function socketData(event:ProgressEvent){ trace(event.target.readUTFBytes(event.target.bytesAvailable)); }
看看这个fla版本的是不是在代码上思路更加清晰呢?所有事件已经全部改为监听的方式,并且所有事件将把事件作为参数传入函数。 bytesAvailable为字节长度,而readUTFBytes的参数是从当前指向的位置读取到参数位置,这样写就是读完。 在as2里,如果在事件触发的函数里写this指向的是触发事件的实例,而as3永远指向所在类的实力,触发事件的实例被记录在传入事件参数的target对象中。 as3更加注重的是oop,在fla里已经体现出来了。接下来就来看看DocmentClass的方法
package{class Run{ private var SERVER_PORT:Number = 10086; private var SERVER_IP:String = "127.0.0.1"; public function Run(){ //在这里写代码并在flash里设置该类为文档类,和直接写上帧上其实没有区别,入口函数 new ClientSocket(SERVER_IP,SERVER_PORT); } }}
当然还有一个ClientSocket.as的文件放这个socket客户端类
package { import flash.net.Socket; import flash.events.ProgressEvent; import flash.events.Event; import flash.events.IOErrorEvent; public class ClientSocket extends Socket { public function ClientSocket(ip:String,port:uint) { super(ip,port); addEventListener("cennect",socketConnect); addEventListener("socketData",socketData); addEventListener("ioError",ioError); } public function send(src:String) { writeUTFBytes(src); writeByte(10); flush(); } private function socketConnect(event:Event) { send("hello world"); } private function socketData(event:ProgressEvent) { trace(readUTFBytes(bytesAvailable)); } private function ioError(event:IOErrorEvent) { trace("connect error"); } } }
入口函数创建了一个客户端的对象,而具体的类的内部构造如上代码所示: 首先创建父类构造函数,再为自己添加监听,当连接时执行socketConnect();发送字符串,注意writeByte(10)是换行符。 在as3的socket类里还有其他的事件,这里因为教学原因所以没有过多的举例,相关可以查阅socket的帮助 close 在服务器关闭套接字连接时调度。 connect 在建立网络连接后调度。(这个监听在教程里已经实现) deactivate Flash Player 失去操作系统焦点并变为非活动状态时调度。 ioError 在出现输入/输出错误并导致发送或加载操作失败时调度。(以前是在onConnect传入false,而这里是直接引发ioError事件,更规范) securityError 若对 Socket.connect() 的调用尝试连接到调用方安全沙箱外部的服务器或端口号低于 1024 的端口,则进行调度。 socketData 在套接字接收到数据后调度。 (这个监听在教程里已经实现)
出处:蓝色理想
责任编辑:bluehearts
上一页 Flash P2P 通信技巧(AS-Java-AS) [2] 下一页 Flash P2P 通信技巧(AS-Java-AS) [4]
◎进入论坛RIA设计与应用版块参加讨论
|