日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

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

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

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

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

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

當(dāng)數(shù)據(jù)準(zhǔn)備好了時,socketData事件就會觸發(fā),通過注冊該事件處理函數(shù),當(dāng)數(shù)據(jù)發(fā)送過來時就會觸發(fā),因此可通過該處理函數(shù)讀取數(shù)據(jù)。

為了讀取服務(wù)器發(fā)送來的數(shù)據(jù),Socket類提供了一系列read方法來讀取不同類型的數(shù)據(jù),例如通過readByte( )方法讀取一個字節(jié),readUnsignedInt( )方法讀取一個無符號整數(shù),具體看下面的表格:

Table 24-1. Socket read methods for various datatypes

方法:返回類型描述字節(jié)數(shù)readBoolean():Boolean讀取布爾型數(shù)據(jù)1readByte():int 讀取一個字節(jié)數(shù)據(jù)1readDouble():Number讀取IEEE 754 雙精度浮點(diǎn)數(shù) 8readFloat():Number讀取IEEE 754單精度浮點(diǎn)數(shù) 4readInt():in 讀取32位整數(shù) 4readObject():* 讀取AMF格式對象NreadShort():int 讀取16位整數(shù) 2readUnsignedByte():uint讀取無符號字節(jié)1readUnsignedInt():uint 讀取無符號32位整數(shù)4readUnsignedShort():uint讀取無符號16位整數(shù) 2readUTF():String讀取UTF-8字符串n

?

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

bytes

一個flash.util.ByteArray 實(shí)例填充讀取的數(shù)據(jù)

offset

一個uint值指定讀取數(shù)據(jù)的偏移量,默認(rèn)為0

length

一個uint值表示讀取的字節(jié)數(shù),默認(rèn)為0,表示所有的數(shù)據(jù)

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

下面的例子代碼連接一個socket服務(wù)器并讀取和顯示服務(wù)器發(fā)送的數(shù)據(jù):

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服務(wù)器發(fā)送"Hello"字符串,則輸出:

//Socket接收5字節(jié)的數(shù)據(jù):

72

101

108

108

111

?

Socket對象接收的數(shù)據(jù)都是ASCII編碼的文本,我們可以用readUTFBytes( )方法重新構(gòu)造字符串,readUTFBytes( )方法需要知道有多少個字節(jié)需要轉(zhuǎn)換,用bytesAvailable屬性指定字節(jié)數(shù):

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

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

當(dāng)數(shù)據(jù)準(zhǔn)備好時XMLSocket實(shí)例發(fā)出data事件,事件類型為flash.events.DataEvent.DATA ,它其中的data屬性包含接收過來的數(shù)據(jù)。

從服務(wù)器返回的數(shù)據(jù)都是原始的數(shù)據(jù),如果你希望以XML進(jìn)行處理則需先把數(shù)據(jù)轉(zhuǎn)換為XML 實(shí)例。

下面的代碼例子用XMLSocket連接本地服務(wù)器,端口為2900,連接成功后,發(fā)送<test>消息給服務(wù)器,onData事件處理函數(shù)處理服務(wù)器返回的數(shù)據(jù),返回?cái)?shù)據(jù)為<response><test success='true'/></response>,注意到該事件的data屬性的內(nèi)容只是字符串?dāng)?shù)據(jù),需用XML構(gòu)造器轉(zhuǎn)換位XML實(shí)例,最后通過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 來自于百度空間

總結(jié)

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

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。