日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ActionScript接收socket服务器发送来的数据

發布時間:2024/4/14 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ActionScript接收socket服务器发送来的数据 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原文地址:http://www.asp119.com/news/2009522181815_1.htm

從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讀取布爾型數據1readByte():int 讀取一個字節數據1readDouble():Number讀取IEEE 754 雙精度浮點數 8readFloat():Number讀取IEEE 754單精度浮點數 4readInt():in 讀取32位整數 4readObject():* 讀取AMF格式對象NreadShort():int 讀取16位整數 2readUnsignedByte():uint讀取無符號字節1readUnsignedInt():uint 讀取無符號32位整數4readUnsignedShort():uint讀取無符號16位整數 2readUTF():String讀取UTF-8字符串n

?

還有兩個方法沒有在上面的表格里,它們是readBytes( )和readUTFBytes( ),readBytes( )方法沒有返回值,它接受三個參數:

bytes

一個flash.util.ByteArray 實例填充讀取的數據

offset

一個uint值指定讀取數據的偏移量,默認為0

length

一個uint值表示讀取的字節數,默認為0,表示所有的數據

readUTFBytes( )方法只接受一個參數,表示讀取的UTF-8字節數,返回一個字符串。

下面的例子代碼連接一個socket服務器并讀取和顯示服務器發送的數據:

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屬性指定字節數:

var string:String = socket.readUTFBytes(socket.bytesAvailable);

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

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

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

下面的代碼例子用XMLSocket連接本地服務器,端口為2900,連接成功后,發送<test>消息給服務器,onData事件處理函數處理服務器返回的數據,返回數據為<response><test success='true'/></response>,注意到該事件的data屬性的內容只是字符串數據,需用XML構造器轉換位XML實例,最后通過E4X 語法輸出XML:

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 );

}

}

}

收藏于 2011-05-24 來自于百度空間

總結

以上是生活随笔為你收集整理的ActionScript接收socket服务器发送来的数据的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。