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.

主站蜘蛛池模板: 无码一区二区三区视频在线播放| 国产精品私拍99pans大尺度 | 无码国产偷倩在线播放老年人| 国产色婷婷视频在线观看| 无码日韩视频| 国产欧美视频综合二区| 成人伊人色一区二区三区| 国内精品一区二区在线观看| 国产黄色视频综合| 亚洲国产精品无码久久一线| 亚洲狠狠婷婷综合久久久久| 草草线在成年免费视频2| 美女被躁出白浆视频播放| 国产精品嫩草影院视频| 青青久视频| 国产99精品视频| 精品少妇人妻一区二区| 亚洲最新地址| 素人激情视频福利| 国产波多野结衣中文在线播放| 国产男人天堂| 国产欧美日韩专区发布| 国产成人久视频免费| 国产精品美女在线| 九九九精品视频| 国产成人精品高清不卡在线| 尤物精品视频一区二区三区| 亚洲男人的天堂在线观看| 视频国产精品丝袜第一页| 中文字幕av无码不卡免费| 国产成人91精品免费网址在线| 亚洲国产天堂久久综合226114| 久久亚洲欧美综合| 久久精品这里只有国产中文精品| 国模在线视频一区二区三区| 久久精品波多野结衣| 精品一区二区三区无码视频无码| 亚洲人成网7777777国产| 国产成人高清精品免费| 亚洲 欧美 偷自乱 图片 | 在线免费看片a| 成年女人a毛片免费视频| 美女无遮挡被啪啪到高潮免费| 欧美在线伊人| 久久精品丝袜| 国产永久免费视频m3u8| 再看日本中文字幕在线观看| 啪啪免费视频一区二区| 欧美日韩午夜视频在线观看| 亚洲成人网在线播放| 中文字幕在线看视频一区二区三区| 伊人中文网| 男女男免费视频网站国产| 亚洲狼网站狼狼鲁亚洲下载| 久久亚洲精少妇毛片午夜无码| 91免费国产在线观看尤物| 国产福利影院在线观看| 97国产一区二区精品久久呦| 亚洲中文字幕23页在线| 激情无码字幕综合| aⅴ免费在线观看| 精品一区二区三区中文字幕| 婷五月综合| 伊人AV天堂| 91精品国产自产91精品资源| 国产精品片在线观看手机版| 高清乱码精品福利在线视频| WWW丫丫国产成人精品| 免费看美女毛片| 精品少妇三级亚洲| 99这里只有精品在线| 国产激爽爽爽大片在线观看| 日本成人不卡视频| 日韩亚洲综合在线| 国产亚洲欧美在线中文bt天堂| 在线人成精品免费视频| 18禁不卡免费网站| 国产麻豆精品手机在线观看| 欧美日韩中文字幕在线| 国产精品视频观看裸模| 免费中文字幕一级毛片| 五月婷婷激情四射|