麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 網站 > WEB開發 > 正文

24.3.接收數據

2024-04-27 13:47:00
字體:
來源:轉載
供稿:網友
問題
我想接收socket服務器發送來的數據

解決辦法
對于Socket實例可通過ProgressEvent.SOCKET_DATA事件處理函數中讀取數據,可用readByte( )或readInt( )方法

對于XMLSocket實例可通data事件處理函數中讀取XML數據

討論
從socket中接收數據的方法取決于你使用socket類型,Socket和XMLSocket都可以接收數據,但是兩者實現方法有些不同,讓我們先看看Socket類是如何做的。

正如前面所講到的,Flash提供的socket通信方式是異步通信,也就是說僅僅創建socket連接并試圖讀取數據這是不可能的,read方法讀取數據時并不會等待數據傳輸過來而立即返回,如果數據還沒準備好而去讀取數據會導致異常。

當數據準備好了時,socketData事件就會觸發,通過注冊該事件處理函數,當數據發送過來時就會觸發,因此可通過該處理函數讀取數據。

為了讀取服務器發送來的數據,Socket 類提供了一系列read 方法來讀取不同類型的數據,例如通過readByte( )方法讀取一個字節,readUnsignedInt( )方法讀取一個無符號整數,具體看下面的表格:
Table 24-1. Socket read methods for various datatypes
方法:返回類型描述 描述字節數 字節數
readBoolean():Boolean 讀取布爾型數據 1
readByte():int 讀取一個字節數據 1
readDouble():Number 讀取IEEE 754雙精度浮點數 8
readFloat():Number 讀取IEEE 754單精度浮點數 4
readInt():in 讀取32位整數 4
readObject():* 讀取AMF格式對象 N
readShort():int 讀取16位整數 2
readUnsignedByte():uint 讀取無符號字節 1
readUnsignedInt():uint 讀取無符號32位整數 4
readUnsignedShort():uint 讀取無符號16位整數 2
readUTF():String 讀取UTF-8字符串 n

還有兩個方法沒有在上面的表格里,它們是readBytes( )和readUTFBytes( ),readBytes( )方法沒有
返回值,它接受三個參數:
bytes
一個flash.util.ByteArray 實例填充讀取的數據
offset
一個uint值指定讀取數據的偏移量,默認為0
length
一個uint值表示讀取的字節數,默認為0,表示所有的數據
readUTFBytes( )方法只接受一個參數,表示讀取的UTF-8 字節數,返回一個字符串。
下面的例子代碼連接一個socket服務器并讀取和顯示服務器發送的數據:
+展開
-ActionScript
package {
import flash.display.Sprite;
import flash.events.ProgressEvent;
import flash.net.Socket;
public class SocketExample extends Sprite {
private var socket:Socket;
public function SocketExample( ) {
socket = new Socket( );
// Listen for when data is received from the socket server
socket.addEventListener( ProgressEvent.SOCKET_DATA, onSocketData );
// Connect to the server
socket.connect( "localhost", 2900 );
}
private function onSocketData( event:ProgressEvent ):void {
trace( "Socket received " + socket.bytesAvailable + " byte(s) of data:" );
// Loop over all of the received data, and only read a byte if there
// is one available
while ( socket.bytesAvailable ) {
// Read a byte from the socket and display it
var data:int = socket.readByte( );
trace( data );
}
}
}
}

上面的例子中,如果socket服務器發送"Hello"字符串,則輸出:
//Socket接收5字節的數據:
72
101
108
108
111
Socket對象接收的數據都是ASCII編碼的文本,我們可以用readUTFBytes( )方法重新構造字符串,readUTFBytes( )方法需要知道有多少個字節需要轉換,用bytesAvailable屬性指定字節數:
+展開
-ActionScript
var string:String = socket.readUTFBytes(socket.bytesAvailable);

XMLSocket類和Socket類基本類似,兩者都要注冊監聽器檢測數據是否接收完畢,但是兩者讀取數據的方式是不同的。

當數據準備好時XMLSocket 實例發出data 事件,事件類型為flash.events.DataEvent.DATA ,它其中的data屬性包含接收過來的數據。

從服務器返回的數據都是原始的數據,如果你希望以XML進行處理則需先把數據轉換為XML實例。

下面的代碼例子用XMLSocket連接本地服務器,端口為2900,連接成功后,發送<test>消息給服務器, onData 事件處理函數處理服務器返回的數據, 返回數據為<response><test success='true'/></response>,注意到該事件的data屬性的內容只是字符串數據,需用XML構造器轉換位XML實例,最后通過E4X 語法輸出XML:
+展開
-ActionScript
package {
import flash.display.Sprite;
import flash.events.Event;
import flash.events.DataEvent;
import flash.net.XMLSocket;
public class SocketExample extends Sprite {
private var xmlSocket:XMLSocket;
public function SocketExample( ) {
xmlSocket = new XMLSocket( );
// Connect listener to send a message to the server
// after we make a successful connection
xmlSocket.addEventListener( Event.CONNECT, onConnect );
// Listen for when data is received from the socket server
xmlSocket.addEventListener( DataEvent.DATA, onData );
// Connect to the server
xmlSocket.connect( "localhost", 2900 );
}
private function onConnect( event:Event ):void {
xmlSocket.send( "<test/>" );
}
private function onData( event:DataEvent ):void {
// The raw string returned from the server.
// It might look something like this:
// <response><test success='true'/></response>
trace( event.data );
// Convert the string into XML
var response:XML = new XML( event.data );
// Using E4X, access the success attribute of the "test"
// element node in the response.
// Output: true
trace( response.test.@success );
}
}
}
上一篇:24.0.簡介

下一篇:24.2.發送數據

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 免费毛片视频 | 热@国产 | 天天艹综合 | 羞羞答答视频 | 中国老女人一级毛片视频 | 91精品视频免费 | 久久网站热最新地址 | 国产亲子伦在线观看 | 日韩毛片网| 在线成人免费观看 | a黄网站 | 青热久思思 | 国产女做a爱免费视频 | 羞羞视频免费观看入口 | 91精选视频| 久久久久久久久成人 | 免费观看一级黄色片 | 中文在线观看视频 | av免费在线播放 | 国产大片在线观看 | 成人午夜视屏 | 免费视频99| 日韩理论电影网 | 91精品视频在线看 | 免费黄网站在线播放 | 5a级毛片 | 91网站链接 | 亚洲导航深夜福利涩涩屋 | 91精品国产毛片 | 欧美性生交xxxxx久久久缅北 | 中文字幕欧美在线 | 免费一级在线观看 | 欧美 videos粗暴 | 一区二区三高清 | 毛片观看网址 | 欧美日韩亚洲国产 | 手机在线看片国产 | 李宗瑞国产福利视频一区 | 午夜男人在线观看 | 综合激情网 | 男人午夜小视频 |