999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

淺談Flash與XML之間的通信

2008-12-31 00:00:00
電腦知識與技術 2008年15期

摘要:簡要介紹了XML入門知識,在Flash中使用XML的優、缺點。從使用XML對象和使用XMLSocket對象兩種方式討論了在Flash 8中載入XML文件的方法,并分析了在Flash 8中使用兩種方式載入XML文件的通信原理,通過簡要代碼說明Flash與XML之間的通信方法。淺要介紹了XML在Flash中涉及到的本地和網絡兩方面的應用。

關鍵詞:XML;XML對象;XMLSocket對象;Flash 8

中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2008)15-20992-04

The Brief Introduction to the Communication between Flash and XML

SUN Ying

(Zhengzhou Railway Vocational Technical College,Zhengzhou 450000,China)

Abstract:This article introduces the rudimental knowledge of XML and the merits when used in Flash.It discusses the method of loading XML files and analyzes its communicating principle in Flash 8 by using XML object and using XML Socket object.At the same time,it describes the communicating method through brief code.In a word,the article introduces the native and network application of XML in Flash.

Key words:XML;XML object;XML Socket object;Flash 8

1 有關XML

1.1 XML入門知識

XML(eXtensible Markup Language)是一種具有數據描述功能(Meta-language)、高度結構性及可驗證性的語言。和HTML一樣,XML同樣使用了標記和屬性;和HTML最大的不同在于XML的標記和屬性允許用戶自行定義,并可以依照所定義的標記與屬性的語法來開發應用程序。XML采用了開放架構設計,它允許在Internet上的任何平臺或語言之間交換數據。這項技術已經被廣泛采用,目前幾乎難以找到一個不以某種方式使用XML的應用程序。

一個簡單的XML文件如下所示:

XML入門知識

Flash和XML之間的通信

為什么是XML

1.2 為什么在Flash中用XML

首先,大多數瀏覽器限制了URL為256個字符(包括查詢字符串數據)。而XML對象沒有這樣的限制,這就使它成為將數據庫內容加入Flash動畫的一個理想方法。其次,XML對象允許輸入和集成任何Web上的XML格式的數據到Flash中,Flash能夠將XML數據和精彩的動畫及聲音無縫結合起來。另外,Flash幾乎擁有在任何平臺上處理XML的能力。一般來說,大多數XML轉換是在服務器端處理的,因為瀏覽器對XML的支持不是很完全。但是,Flash載入一個外部XML文件如果超過15秒就會超時,它不會再進行載入,Flash Player和動畫會停止。同樣的,在瀏覽器中使用load或sendAndLoad載入64K或更大的數據會導致性能問題。其特征包括服務器應答\"Error 501-Not Implemented\"或瀏覽器的無響應狀態。Flash Player也不能從外部Web站點上載入XML文件。Flash動畫只能從它自

己的域里載入XML數據。例如,一個在adomain.com上的Flash動畫就不能從bdomain.com讀取或載入XML數據。

2 Flash中XML應用的原理

Flash幾乎擁有在任何平臺上處理XML的能力。XML對象允許輸入和集成任何WEB上的XML格式的數據到Flash中,Flash能夠將XML數據和精彩的動畫及聲音無縫結合起來。現在用Flash 8來做有關XML的應用很方便。在Flash 8中載入XML文件主要有兩種方式:使用XML對象和使用XMLSocket對象。使用XML對象應用的HTTP的通信方式,而使用XMLSocket對象應用的是Socket的通信方式,兩者有較大的區別。

2.1 使用XML對象

在網絡應用中,使用XML對象應用HTTP通信方式,基本的通信模式仍然是請求響應。首先在Flash中對數據進行處理,生成XML樹,然后通過HTTP的通信方式將XML文件發送到服務器端。在服務器端,首先對接收到的XML樹進行解釋,再根據流程做相應的操作,比如讀寫數據庫或其他資源,然后生成XML樹,通過HTTP的通信方式將XML文件發送到Flash端。最后在Flash端接收XML文件,對XML樹進行解釋,對相應的數據進行操作,如此循環。其通信原理如圖1所示。

Flash端主要用到XML對象中的send( )、load( )、sendAndLoad( )、onLoad( )、onData( )及其他操縱XML樹的方法與事件。比如,生成XML樹的代碼如下:

loginXML=new XML( ); //生成一個XML對象

loginElement=loginXML.createElement(“LOGIN”); //生成一個元素

loginElement.attributes.username=username;

loginElement.attributes.password=password; //設置元素的屬性

loginXML.appendChild(loginElement); //將所生成的元素加到XML對象

解釋XML樹的代碼如下:

loginReplyXML=new XML( ); //生成一個響應的XML對象

loginReplyXML.onLoad=onLoginReply( );//設置響應XML對象下載事件的函數

function onLoginReply( ) { //對返回的XML文件進行操作

var e=this.firstChild; //解釋返回的XML文件

if(e.nodeName==”LOGINREPLY” e.attributes.status==”OK”) {

//根據返回的XML文件中的數據做相應的操作

gotoAndStop(“success”);

} else {

gotoAndStop(“loginFailed”);

}}

有關XML數據的通信代碼如下:

loginXML.sendAndLoad(“http://www.cytang.com/test.asp”, loginReplyXML);

//根據URL去取響應的XML文件到響應的XML對象中

在服務器端常用的工具有ASP、JSP、PHP、Perl等腳本語言,它們所起的作用是操作XML樹和數據的通信。

下面以常用的ASP為例,解釋XML樹的代碼:

var XMLLogin=new ActiveXObject(“MsXML2.DomDocument”);

//創建一個新的Domdocument對象,保存客戶端傳送過來的XML請求

XMLLogin.loadXML(Request.Form( ));

//從發送來的表單中取得數據

var reElement=XMLLogin.documentElement;

//創建XML元素

password=reElement.attributes[0].nodeValue;

username=reElement.attributes[1].nodeValue;

//提取用戶名和密碼信息

生成XML樹的代碼并發送的代碼為:

var XMLRepley=new ActiveXObject(“MsXML2.DomDocument”);

//創建一個新的DomDocument對象,向客戶發送

XMLRepley.loadXML(“”);

//創建一個簡單的XML文件

Response.Write(XMLRepley.XML);

//也是通過Write( )方法將XML文件返回到Flash端

另外一種情況是載入本地XML文件,也就是生成、解釋XML文件,獲取所需數據,不需要在服務器端做其他的操作。例如,讀一個本地XML文件的代碼為:

playlist_XML=new XML( ); //創建一個XML對象

playlist_XML.ignoreWhite=true;//省略空白

playlist_XML.onLoad=function(success){//當加載XML文件成功的時候觸發此函數

trace(“success”);}

Playlist_XML.load(“cytang.XML”); //加載本地的XML文件

上面所涉及的代碼都是舉例而已,實際應用中的代碼會更復雜。但其中的原理都是相通的,其流程就是先生成XML文件,發送到服務器端,然后將服務器端返回的XML文件解釋。

2.2 使用XMLSocket對象

在網絡通信中,使用XMLSocket對象的通信方式為Socket。所謂的Socket,可以將它想象為一條通路,需要通信的時候,在客戶端服務器端建立一個鏈接,然后傳送內容,通信完畢后再撤銷這個通路。Flash端跟服務器端的通信模式為:首先在Flash端與服務器建立一個Socket鏈接,生成XML文件后,通過所建立的Socket鏈接將XML文件發送到服務器端,服務器端解釋所接收到的文件,對數據進行相應的操作后,生成一個XML文件,通過Socket鏈接發送到Flash端,Flash端解釋XML文件后就得到所需要的數據。如此循環,操作完成后關閉Socket鏈接,其通信原理如圖2所示。

在Flash端:XMLSocket對象中,只有三個方法和四種事件,都是在Socket通信時候用的。下面是XMLSocket的三個方法:

.connect(服務器地址,端口號):嘗試鏈接遠程計算機,示例如下:

var mySocket=new XMLSocket( ); //聲明XMLSocket對象

mySocket.connect(“192.168.0.126”,9980); //根據IP地址和端口鏈接服務器

mySocket.onConnect=function(success) { //鏈接成功與否的判斷

if(success) {

trace(“鏈接成功”);

} else {

trace(“鏈接失敗”);

}

}

mySocket.onXML=function(XMLDoc) { //當接收到XML文檔的時候,觸發此函數

}

其中,connect方法有兩個參數,第一個參數表示要鏈接的主機,可以是全限定的域名或者IP地址,需要注意一點:當使用IP地址,如192。168。0。126時,需把它當作字符串來處理,即要用引號把IP地址括起來。如果為1,則鏈接Web服務器(從該Web服務器下載了包含當前Flash應用的網頁)所在的IP地址。

第二個參數表示要鏈接的端口,由于低于1024的端口被通用程序所占,Flash的安全規則不允許在低于1024的端口建立鏈接。Connect方法返回布爾型變量true或1,表示鏈接是否成功。以上語句中,如果鏈接失敗,connect方法返回1,則會彈出“鏈接失敗”的信息框。

.send(信息內容):在和遠程計算機建立鏈接后,發送信息到遠程計算機,示例如下:

mySocket.send(“”);

其中,參數可以是一個XML字符串,也可以是一個XML對象,如果是XML對象,send方法會先將對象轉化為字符串,然后將該字符串發送到服務端,并在字符串發送后,追加發送一個0字節。Send方法沒有返回值。

.close( ):關閉和遠程計算機之間的鏈接,示例如下:

mySocket.close( );

下面是XMLSocket的四種事件:

.onConnect(聯機結果)

當connect( ) 聯機方法執行完畢后,它會觸發并且傳入一個代表聯機是否成功的參數給onConnect( )事件,如果聯機成功,其值將是true。

.onData( )

當XMLSocket接收到遠程計算機傳入的數據時,就會觸發onData( )事件。

.onXML( )

當XMLSocket接收到遠程計算機傳入的XML數據時,就會觸發onXML( )事件。在onXML事件中,使用onData事件中得到的數據生成一個XML對象,并把該對象作為參數傳給onXML事件的處理函數,所以如果要自定義onXML事件的處理函數,服務器端發送來的數據就必須是XML格式,否則就會發生意想不到的錯誤。如果設置了onData事件的處理函數,當數據到達時,將不再調用onXML事件的處理函數,除非再顯式地調用,所以在某種意義上,這兩種事件是互斥的。

.onClose( )

當遠程端計算機中斷鏈接時,這個事件會被觸發。

在服務器端:選用服務器端的開發語言的標準是,起碼要能夠做Socket方面的操作(復雜的應用當中還需要多線程、負載平衡等方面的東西)。比較常用的有C/C++、java,其他的比如Delphi、Vb等工具對Socket的操作就有點不方便。要開發一個高效率、穩定、可擴展的服務器端程序并不是一件很簡單的事情,最好能找點相應的資料深入學習一下,剛入門的時候,學習的重點可以放在Socket和多線程上面。下面以比較流行的java語言來舉例說明服務器端程序的簡單架構:

//運用多線程防止服務器阻塞

public class MultiThreadServer extends Thread

{

private ServerSocket listen_socket;

public MultiThreadServer(int port)

{

try

{

listen_socket = new ServerSocket(port); //創建一個服務器端的Socket

this.start(); //啟動多線程

}

catch(IOException e) //捕捉異常

{

e.printStackTrace();

}

}

//下面為服務器監聽線程的主程序。

public void run()

{

while(true) //死循環,一直在端口上監聽有無客戶端的Socket連接

{

try

{

//有客戶端連接上來,創建一個相應的Socket,并啟動響應的函數

Socket client_socket= listen_socket.accept();

SockState sstate=new SockState(client_socket);

OperThread oper=new OperThread(sstate);

}catch(Exception ee)

{

System.out.print(\"MultiThreadServer run:\"+ee.getMessage());

}

}

}

}

3 XML在Flash中主要涉及兩方面的應用,本地應用和網絡應用

本地應用主要是存取XML文件中所保存的數據,這里所指的數據并不一定限定是文本數據,也可以是圖片數據,聲音數據等等。比如可以用Flash + XML來做圖片管理器,歌曲列表管理器,用處還是比較大的,也比較靈活。

網絡應用是XML在Flash中的主要用途,它的優缺點在前面內容中已經提到。比如說,可以用來做電子商務方面的應用、論壇、聊天室等等。

參考文獻:

[1] 賀小霞,Flash 8 動畫制作.清華大學出版社,2006.

[2] 耿祥義.新編精品教材庫XML基礎教程.清華大學出版社,2006.

[3] Didier Martin.xml高級編程.機械工業出版社,2001.

[4] 丘廣華.XML編程實例教程.科學出版社,2004.

主站蜘蛛池模板: 无码福利视频| 亚洲综合18p| 亚洲国产系列| 51国产偷自视频区视频手机观看| jizz国产在线| 欧美午夜视频在线| 国产人免费人成免费视频| 最新日韩AV网址在线观看| 国产不卡国语在线| 亚洲国语自产一区第二页| 中文字幕色站| 伊人激情综合| 色久综合在线| 日韩精品毛片人妻AV不卡| 尤物午夜福利视频| 亚洲最黄视频| 久草视频精品| 欧美日韩导航| 久久久无码人妻精品无码| 亚洲一级色| 91蝌蚪视频在线观看| 尤物成AV人片在线观看| 国产乱人伦AV在线A| 久久午夜影院| 91美女视频在线| 91在线无码精品秘九色APP| 亚洲美女久久| 99精品国产自在现线观看| 中文字幕在线观看日本| 激情国产精品一区| 亚洲AⅤ波多系列中文字幕| 精品少妇人妻一区二区| 伊人久久影视| 日韩第九页| 国产不卡在线看| 99在线视频免费| 五月婷婷精品| 青青青国产视频| 精品一区二区无码av| 国产激情无码一区二区免费| 欧美精品三级在线| 久久婷婷五月综合97色| 日韩东京热无码人妻| 欧洲免费精品视频在线| 亚洲欧美极品| 亚洲视频影院| 国产真实乱子伦精品视手机观看| aaa国产一级毛片| 亚洲国产精品美女| 欧美a在线| a级毛片视频免费观看| 特级毛片8级毛片免费观看| 国产在线观看91精品| 国产精品亚欧美一区二区三区| 婷婷综合缴情亚洲五月伊| 亚洲欧美日韩精品专区| 国产av一码二码三码无码| 暴力调教一区二区三区| 亚洲色成人www在线观看| 台湾AV国片精品女同性| 3D动漫精品啪啪一区二区下载| 国产原创第一页在线观看| 国产视频 第一页| 国产又爽又黄无遮挡免费观看| 久久久久88色偷偷| 素人激情视频福利| 日本欧美午夜| 免费看久久精品99| 国产呦精品一区二区三区网站| 成人亚洲国产| 亚洲综合第一区| 91视频日本| 亚洲精品午夜天堂网页| 最近最新中文字幕免费的一页| 欧美 国产 人人视频| 成年午夜精品久久精品| 成人精品免费视频| 国产精品亚欧美一区二区| 天天综合色天天综合网| 色综合天天娱乐综合网| 伊人五月丁香综合AⅤ| 亚洲精品无码AV电影在线播放|