flash中通過XMLSocket監控生產系統(2-3)
發表時間:2024-06-10 來源:明輝站整理相關軟件相關文章人氣:
[摘要]4) 當連接建立成功之后,客戶端與服務端就可以相互發送XML數據了。使用XMLSocket 對象的send方法向服務端發送數據: mySocket.send(myXML); 其中,myXML是一個包含XML數據的XML對象,send方法先把myXML轉化為字符串,然后將該字符串發送到服務端,并在...
4) 當連接建立成功之后,客戶端與服務端就可以相互發送XML數據了。使用XMLSocket 對象的send方法向服務端發送數據:
mySocket.send(myXML); 其中,myXML是一個包含XML數據的XML對象,send方法先把myXML轉化為字符串,然后將該字符串發送到服務端,并在字符串發送后,追加發送一個0字節。send方法沒有返回值。
以下示例中,先生成一個空的XML對象myXML,然后在myXML中添加了一個元素節點myLogin,該節點包含兩個屬性username和password,send方法把myXML轉化成字符串
后,發送給服務端,當然還要追加發送一個0字節,以表示一條XML數據的完成:
var myXML = new XML();
var myLogin = myXML.createElement("login");
myLogin.attributes.username = "morgan";
myLogin.attributes.password = "loveme";
myXML.appendChild(myLogin);
mySocket.send(myXML); 當有數據到達(收到一條以0字節為結尾的字符串)時,首先將觸發onData事件,相應的事件處理函數myOnData帶有一個參數,表示當時到達的數據字符串,但不包含0字節,如下例中,服務端傳來一個字符串 “I am Morgan Yang !”,加上一個0字節,以下語句將把myTextField(為一非靜態文字TextField對象的實例)的內容設為“I am Morgan Yang !”,我們注意到這里發送的數據,可以是包括XML格式在內的任何形式:
function myOnData(src) {
myTextField.text = src ;
}對于onData事件,如果沒有相應的事件處理函數,默認將觸發onXML事件,形式如下:
XMLSocket.prototype.onData = function (src) {
this.onXML(new XML(src));
} 即在onXML事件中,使用onData事件中得到的數據生成一個XML對象,并把該對象作為參數傳給onXML事件的處理函數,所以如果要自定義onXML事件的處理函數,服務端發送來的數據就必須是XML格式,否則就會發生意想不到的錯誤。如果設置了onData事件的處理函數,當數據到達時,將不再調用onXML事件的處理函數,除非在顯式地調用,所以在某種意義上,兩種事件是互斥的。
在沒設置onData事件處理函數,又設置了onXML事件處理函數情況下,當有XML數據
到達時,以下語句將把兩個非靜態文字實例nameTextField和passwordTextField的內容分別設為“Morgan”和“loveme”:
function myOnXML(doc) {
var e = doc.firstChild;
if (e != null && e.nodeName == " login ") {
nameTextField.text = e.attributes.username ;
passwordTextField.text = e.attributes.password ;
}
}5) 最后,在程序結束的時侯,使用XMLSocket 對象的close方法,關閉Socket連接,如下: mySocket.close(); 需要注意的是,使用XMLSocket 對象的close方法,來關閉Socket連接不觸發XMLSocket對象的onClose事件,只有當Socket連接被服務端關閉時,才在Flash應用客戶端觸發該事件,默認情況下,XMLSocket 對象的onClose事件處理函數不執行任何動作,可以自定義該事件處理函數,以達到特定目的。如以下語句,在onClose事件發生時,把myTextField(為一非靜態文字實例)的內容設為 “Socket Closed By Server !”
function myOnClose() {
myTextField .text = "Socket Closed By Server !" ;
}