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版本的是不是在代碼上思路更加清晰呢?所有事件已經(jīng)全部改為監(jiān)聽的方式,并且所有事件將把事件作為參數(shù)傳入函數(shù)。 bytesAvailable為字節(jié)長度,而readUTFBytes的參數(shù)是從當(dāng)前指向的位置讀取到參數(shù)位置,這樣寫就是讀完。 在as2里,如果在事件觸發(fā)的函數(shù)里寫this指向的是觸發(fā)事件的實例,而as3永遠指向所在類的實力,觸發(fā)事件的實例被記錄在傳入事件參數(shù)的target對象中。 as3更加注重的是oop,在fla里已經(jīng)體現(xiàn)出來了。接下來就來看看DocmentClass的方法
package{class Run{ private var SERVER_PORT:Number = 10086; private var SERVER_IP:String = "127.0.0.1"; public function Run(){ //在這里寫代碼并在flash里設(shè)置該類為文檔類,和直接寫上幀上其實沒有區(qū)別,入口函數(shù) new ClientSocket(SERVER_IP,SERVER_PORT); } }}
當(dāng)然還有一個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"); } } }
入口函數(shù)創(chuàng)建了一個客戶端的對象,而具體的類的內(nèi)部構(gòu)造如上代碼所示: 首先創(chuàng)建父類構(gòu)造函數(shù),再為自己添加監(jiān)聽,當(dāng)連接時執(zhí)行socketConnect();發(fā)送字符串,注意writeByte(10)是換行符。 在as3的socket類里還有其他的事件,這里因為教學(xué)原因所以沒有過多的舉例,相關(guān)可以查閱socket的幫助 close 在服務(wù)器關(guān)閉套接字連接時調(diào)度。 connect 在建立網(wǎng)絡(luò)連接后調(diào)度。(這個監(jiān)聽在教程里已經(jīng)實現(xiàn)) deactivate Flash Player 失去操作系統(tǒng)焦點并變?yōu)榉腔顒訝顟B(tài)時調(diào)度。 ioError 在出現(xiàn)輸入/輸出錯誤并導(dǎo)致發(fā)送或加載操作失敗時調(diào)度。(以前是在onConnect傳入false,而這里是直接引發(fā)ioError事件,更規(guī)范) securityError 若對 Socket.connect() 的調(diào)用嘗試連接到調(diào)用方安全沙箱外部的服務(wù)器或端口號低于 1024 的端口,則進行調(diào)度。 socketData 在套接字接收到數(shù)據(jù)后調(diào)度。 (這個監(jiān)聽在教程里已經(jīng)實現(xiàn))
出處:藍色理想
責(zé)任編輯:bluehearts
上一頁 Flash P2P 通信技巧(AS-Java-AS) [2] 下一頁 Flash P2P 通信技巧(AS-Java-AS) [4]
◎進入論壇RIA設(shè)計與應(yīng)用版塊參加討論
|