1. 程式人生 > >AS3中Socket與XMLSocket問題總結

AS3中Socket與XMLSocket問題總結

XMLSocket
使用目的:XML通訊連線與操作。
說明:XMLSocket類可實現使用者端與伺服器端的連線,這使得指定Flash Player的計算機可以與特定的IP地址或網段名稱伺服器計算機進行通訊。XMLSocket類物件對於要求

實時通訊的使用者/伺服器應用程式非常有用,如實時聊天系統,XMLSocket類物件,伺服器必須執行可識別XMLSocket類使用的協議程式,XML訊息通過TCP/IP連線傳送,每個

XML訊息都是一個完整的XML檔案,以一個零(0)字元結束,通過一個XMLSocket連線傳送和接收的XML訊息的數量沒有限制。XMLSocket物件接到伺服器的方式和位置受一下

限制,XMLSocket.connect()方法只能連線到埠號大於或等於1024的TCP連線埠,XMLSocket.connect()方法只能連線到SWF檔案所在的同一網段中的計算機。
語法結構:
XMLSocket物件.方法
構造XMLSocket物件:
XMLSocket物件名稱 = new XMLSocket(伺服器,連線埠)
var XMLSocket物件名稱:XMLSocket = new XMLSocket(伺服器,連線埠)
伺服器 = 字串。希望進行連線通訊的伺服器名稱。
連線埠 = 整數。通訊的連線埠號。
屬性Property:
connected  屬性:布林值  說明:判別XMLSocket物件是否已完成通訊連線。只讀
方法Method:
XMLSocket()  引數:伺服器,連線埠  說明:構造XMLSocket物件。
close()  引數:無  說明:關閉XMLSocket物件的通訊連線。
connect()  引數:伺服器,連線埠  說明:使用指定的TCP連線埠(必須為1024或更高的連線埠)建立一個到指定Internet伺服器的連線,並根據是否成功建立了連

接返回true或false,如果引數伺服器指定null,則與呼叫XMLSocket.connect()方法是SWF檔案所在的主機連線。
send()  引數:XML物件/資料  說明:將指定的XML物件或資料轉換成字串,並將其傳輸到伺服器(字串後方會加入一個零(0)字元),如果引數值是一個XML物件,

則該字串是此XML物件的XML文字表示形式,send方法不會返回資料是否傳輸成功的資訊。
範例:
var myXMLSocket:XMLSocket = new XMLSocket();
建立XMLSocket物件myXMLSocket。
var myXMLSocket:XMLSocket = new XMLSocket("http://

www.virtest.cn",1024);
建立XMLSocket物件myXMLSocket,並與www.virtest.cn伺服器的TCP1024埠進行連線。
var myXMLSocket:XMLSocket = new XMLSocket();
myXMLSocket.connect("http:// www.virtest.cn",1024);
建立XMLSocket物件myXMLSocket,通過connect方法與www.virtest.cn伺服器的TCP1024埠進行連線。
myXMLSocket.cloes();
關閉XMLSocket物件myXMLSocket的連線通訊。
myXMLSocket.send(myXML);
myXMLSocket物件myXMLSocket的send方法將myXML物件轉換成字串並傳送到伺服器。
if(myXMLSocket.connected){
trace("連線成功");}
判斷XMLSocket物件myXMLSocket是否完成通訊連線,如果已完成通訊連線,則在輸出對話方塊中顯示“連線成功”資訊。

Socket
要說as3的socket傳送漢字,首先得認識as3的兩個類:flash.net.Socket和flash.utils.ByteArray,這兩個類的協作關係就是ByteArray
將字串(包括漢字)按照特定的編碼格式轉化成位元組陣列,然後Socket類將這個位元組陣列傳送出去。整體思路是很簡單的。
java與as3的socket通訊

as3 與java 都提供了Socket類用於網路通訊, 但兩者的使用也有較大的不同. 為了方便兩者的通訊, 我在做了一些實驗的基礎上, 寫下獲得的經驗,以免忘記.

as3 的socket 讀寫資料方法常用的有四個: readUTF, writeUTF, readUTFBytes, writeUTFBytesjava 的socket 輸入輸出流常用BufferedReader 和 DataOutputStream 包

裝, 以提高讀寫效率
如:
 
BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream(),    "UTF-8"));
 
DataOutputStream writer = new DataOutputStream(socket.getOutputStream());

as3 方寫資料時用writeUTFBytes 方法, 此時java 方讀資料用reader.readLine() 阻塞式方法.
as3 方寫資料時用writeUTF方法, 此時java 方應改用DataInputStream 類包裝輸入流, 因為BufferedReader 不提供讀取UTF資料的方法.
java 方寫資料時用writeUTF方法, 此時as3 方讀資料用readUTF方法, 但此種模式有個弊端, 就是如果java方連續呼叫了n(n >= 2)次writeUTF方法,而as3方因來不及讀取,

則最後只是第一次寫入的資料被讀取.
java 方寫資料時用writeBytes, 此時as3 方讀資料用readUTFBytes方法讀取資料, 可以這樣讀取: msg = socket.readUTFBytes(socket.bytesAvailable).