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