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 在套接字接收到数据后调度。 (这个监听在教程里已经实现)
admin#flashas.net (#为@) 联系QQ:
:40777822
浙ICP备06033001号