青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

twzheng's cppblog

『站在風口浪尖緊握住鼠標旋轉!』 http://www.cnblogs.com/twzheng

  C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
  136 隨筆 :: 78 文章 :: 353 評論 :: 0 Trackbacks
[轉] ActionScript3.0 Socket

介紹:Socket 連接允許Flash Player通過特定的網(wǎng)絡端口來發(fā)送和加載數(shù)據(jù)。Socket和server連接的最大的不同點是Socket連接在數(shù)據(jù)傳輸完畢之后是不會自動的關閉。
    在一個socket連接建立之后,這個連接就會一直處于打開狀態(tài),除非客戶端或者服務器段顯式的關閉它。基于此,socket允許一種特殊的數(shù)據(jù)傳輸方式,叫做data push,這種凡是允許客戶段的Flash Player沒有發(fā)送請求的時候,服務器可以在任何時候把數(shù)據(jù)傳送到客戶端播放器。
    Socket連接典型的應用就是創(chuàng)建多用戶的應用程序,一中此類應用程序比如在線聊天室。聊天室由一個中心服務器和一些連接到服務器的Flash Player客戶端組成。每次客戶端的.swf文件發(fā)送一條消息到服務器,服務器判斷那個客戶端應該接受這個消息,然后就把這條消息從打開的連接上發(fā)送給合適的用戶。這種情況下,接受消息的客戶并沒有請求接受一個消息,但是這個消息從服務器端發(fā)送出去了。當一個客戶關閉連接的時候,服務器通知所有的客戶有人離開的聊天系統(tǒng)。
    Flash Player可以發(fā)送兩種socket連接到socket服務器,兩種方式有相同的行為和操作,但是也有細小的不同。第一種是XML socket連接,這種方式和之前的Player版本中的XMLSocket類似,對Flash 9來說binary socket是全新的方式。
    我們通過flash.net.XMLSocket和flash.net.Socket兩個類來建立socket連接。
    XML socket 以文本為傳輸方式,客戶端和服務器通過包含數(shù)據(jù)的XML包來交換數(shù)據(jù),通過分析XML包的內容來執(zhí)行動作。
    Binary socket是ActionScript3.0的新東西,這種方式允許我們通過原始鏈接來傳遞二進制信息。Binary socket比XML socket要更加的高效,因為binary socket需要了低級的類型信息,這種方式更加強大,因為我們可以連接到更加寬廣的socket服務器上。比如,binary socket允許我們連接到郵件服務器(POP3,SMTP,IMAP),新聞服務器(通過NNTP),聊天服務器,甚至是桌面共享和遠程桌面通過連接VNC服務器。
    不管什么樣的socket連接類型,他們都是異步執(zhí)行的,這就意味著我們不能通過socket鏈接來獲得數(shù)據(jù)知道我們被通知數(shù)據(jù)加載結束,所有的數(shù)據(jù)加載都必須通過事件處理來自動執(zhí)行。當我們需要在程序運行的時候通過加載一些數(shù)據(jù)來使它繼續(xù)運行下去的時候就需要同步的數(shù)據(jù)加載,這種方式比較容易編寫程序,但是不夠高效。通過這章的學習你會更多學到如何通過異步的方式來加載數(shù)據(jù)。
連接到一個Socket Server
問題:我們想建立一個到socket服務器的連接
解決:Sokect.connect()或者XMLSocket.connect()方法。
討論:在我們連接到一個服務器之前,有兩個重要的信息我們必須知道,第一個是服務器的域名或者ip地址,第二個是我們連接的端口。
    不論我們用的是那種連接方式,連接的處理過程完全一樣,兩個連接類都有一個connect方法,這個方法接受兩個參數(shù):
    Host:這個參數(shù)是一個字符串,表示我們需要連接的服務器的地址,可以是一個域名,比如www.example.com或者一段ip地址。當我們連接的就是本服務器的時候,直接傳遞個null。
    Port:一個整形類型的參數(shù)指定了我們連接到的服務器的端口號碼。端口號碼最小必須是1024,除非有配置文件說明端口號碼可以小于1024。 
    由于在Flash中socket編程是異步這樣的事實,因此connect方法是不會等到socket調用返回就會執(zhí)行connect語句的下面一條語句的,如果你想在連接完全建立之前做一些和socket的交互工作,你的代碼就會遇到一些錯誤。
    比較正確的做法就是在我們調用connect方法之前,我們添加一些偵聽事件到sokect對象,當連接成功建立的時候,會分發(fā)一個connect事件,這個事件告訴我們連接已經(jīng)建立好了,我們可以開始和socket交互了。
    如果我們想鏈接到本地的2900端口上的代碼看起來如下:
package {
 import flash.display.Sprite;
 import flash.events.*;
 import flash.net.Socket;
 public class SocketExample extends Sprite {
    private var socket:Socket;
    public function SocketExample( ) {
      socket = new Socket( );
      // Add an event listener to be notified when the connection
      // is made
      socket.addEventListener( Event.CONNECT, onConnect );
      // Connect to the server
      socket.connect( "localhost", 2900 );
    }
    private function onConnect( event:Event ):void {
      trace( "The socket is now connected..." ); 
    }
 }
}
    如果我們想通過XMLSocket來建立連接,基本的代碼完全一樣我們只需要用XMLSocket來代替Socket類。
    如果連接失敗,會產(chǎn)生運行時錯誤,或者拋出ioError或者securityErrot異常,來通知連接沒有完全成功的建立。更多的關于異常事件參考錯誤處理章節(jié)
    記住,在我們連接到一個服務器的時候,下邊的Flash Player sandbox要遵守:
1.       swf文件必須和主機在相同的域當中
2.       跨域的swf文件是不能訪問本地服務器的
3.       本地非信任的swf文件不能訪問任何的網(wǎng)絡資源
4.       如果允許跨域并且端口號低于1024的訪問時,必須配置跨域配置文件
任何違反安全砂箱的操作比如連接到不信任域或者很小的端口的操作都會引發(fā)securityError事件,這些問題可以通過編寫配置文件來解決。為了在Socket和XMLSocket中使用跨域的配置文件,我們必須加載配置文件:
Security.loadPolicyFile("http://www.rightactionscript.com/crossdomain.xml");
在我們編輯配置文件時,我們不應該僅僅指定受信任的域,還應該有受信任的端口,如果你沒有指定任何的端口,F(xiàn)lash Player將默認80是唯一受信任的端口,你可以通過在port屬性的值后邊添加一個逗號來制定其它的受信任的端口號碼,如下:
<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
   <allow-access-from domain="*" to-ports="80,110" />
</cross-domain-policy>
發(fā)送數(shù)據(jù)
問題:我們想把數(shù)據(jù)傳送到socket服務器
解決:對Socket對象來說,使用write方法(wirteByte(),writeUTFBytes()),來把數(shù)據(jù)寫入緩沖區(qū),然后調用flush()方法把數(shù)據(jù)刷新到輸出流。對XMLSocket對象,使用send方法。
討論:Socket和XMLSocket定義不同的api來發(fā)送數(shù)據(jù)到服務器,讓我們先來了解下API.
    當我們向使用Socket對象來發(fā)送數(shù)據(jù)的時候,首先必須把數(shù)據(jù)寫到緩沖區(qū),Socket類定義了一些用來寫數(shù)據(jù)的方法.每個方法都用來寫不同類型的數(shù)據(jù).這些方法有: writeBoolean( ), writeByte( ), writeBytes( ), writeDouble( ), writeFloat( ), writeInt( ), writeMultiByte( ), writeObject( ), writeShort( ), write- UnsignedInt( ), writeUTF( ), and writeUTFBytes( ).大部分這些方法接受的參數(shù)通過方法的名字已經(jīng)暗示了.
    在我們使用的時候到底使用那個方法完全取決于我們希望發(fā)送什么樣的數(shù)據(jù)到服務器,使用Socket類的時候,你可以完全通過ActionScript來把數(shù)據(jù)寫到Telent或者POP mail服務器.兩種協(xié)議都期望ASCII文本命令,比如,在我們連接到一個POP服務器之后,我們就可以通過USER命令來指定一個用戶,下邊的例子就是向Socket服務器寫這樣一個命令的例子:
// POP servers expect a newline (\n) to execute the preceding command.
socket.writeUTFBytes("USER exampleUsername\n");
   把數(shù)據(jù)寫入Socket對象并不意味著就已經(jīng)傳給服務器了,調用每個write方法都會把數(shù)據(jù)添加到Socket對象上,比如,下邊的例子中我們把四個字節(jié)的數(shù)據(jù)添加到Socket對象,但是他們中的任何一個都沒有被發(fā)送到服務器:
socket.writeByte(1);
socket.writeByte(5);
socket.writeByte(4);
socket.writeByte(8);
   當我們向把Socket中的數(shù)據(jù)傳送到服務器的時候,調用Socket對象的flush()
方法.
   XMLSocket對象基本上和Socket對象有同樣的Api接口,通過調用send()方法來把數(shù)據(jù)傳送到服務器.send方法接受任何類型的參數(shù),它會把這個參數(shù)轉換成string類型,然后傳送到服務器.一般情況下這個參數(shù)是XML對象或者一個字符串里邊包含結構化的XML數(shù)據(jù):
xmlSocket.send(xml);
    然而,精確的數(shù)據(jù)格式完全依賴于服務器段的期望格式,如果服務器期望格式化的XML數(shù)據(jù),那么你就必須傳遞格式化的XML數(shù)據(jù)過去,如果服務器期望URL編碼的數(shù)據(jù),那么你就必須傳遞這樣的數(shù)據(jù)過去.
接受數(shù)據(jù)
To be continuing……


[源] http://tb.blog.csdn.net/TrackBack.aspx?PostId=1688278

posted on 2007-07-19 19:31 譚文政 閱讀(819) 評論(0)  編輯 收藏 引用 所屬分類: 技術·業(yè)界

只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲无毛电影| 久久亚洲精品一区| 国产精品婷婷午夜在线观看| 欧美日韩一区二区在线播放| 欧美午夜电影一区| 国产精品一卡| 尤物精品在线| 亚洲看片网站| 小处雏高清一区二区三区| 久久国产高清| 乱人伦精品视频在线观看| 欧美a级片网站| 亚洲日本aⅴ片在线观看香蕉| 亚洲精品一二三| 亚洲网站在线看| 久久久久一区二区三区四区| 欧美精品在线网站| 国产揄拍国内精品对白| 亚洲伦伦在线| 久久影视三级福利片| 亚洲精品综合| 久久亚洲精品网站| 欧美一级午夜免费电影| 欧美日韩一区二区欧美激情| 欧美剧在线免费观看网站| 欧美性一区二区| 在线观看亚洲精品| 亚洲欧美亚洲| 亚洲人成免费| 欧美专区日韩专区| 欧美视频一区二区三区在线观看| 伊人夜夜躁av伊人久久| 小处雏高清一区二区三区| 亚洲全部视频| 免费观看日韩| 国产一区二区三区在线观看精品| 一本色道久久综合亚洲精品婷婷 | 亚洲女人天堂av| 欧美大片在线看免费观看| 亚洲色图自拍| 欧美精品在线观看| 亚洲国产cao| 久久国产一区二区| 亚洲午夜av在线| 欧美三级第一页| 99pao成人国产永久免费视频| 久久综合久久综合这里只有精品| 亚洲视频一区二区| 欧美日韩美女| 亚洲日本在线视频观看| 蜜桃av噜噜一区二区三区| 性欧美video另类hd性玩具| 国产精品草莓在线免费观看| 在线亚洲高清视频| 亚洲毛片av在线| 欧美日本精品| 一本色道久久精品| 一本色道久久综合| 国产精品手机在线| 欧美一区影院| 亚洲视频一区在线观看| 欧美午夜片在线观看| 亚洲一区不卡| 亚洲尤物在线视频观看| 国产精品一二| 久久久久久久国产| 久久久久久综合网天天| 在线免费一区三区| 亚洲成人在线视频网站| 亚洲电影在线| 卡通动漫国产精品| 老司机午夜精品视频在线观看| 好吊妞这里只有精品| 久久精品亚洲精品| 久久精品青青大伊人av| 亚洲韩国青草视频| 亚洲精品视频免费| 欧美激情一区二区三区全黄 | 欧美在线高清| 黄色成人在线网站| 亚洲激情中文1区| 国产精品国产三级国产aⅴ无密码| 亚洲综合成人在线| 久久精品国产免费| 日韩视频中文字幕| 亚洲砖区区免费| 亚洲国产免费| 亚洲色图在线视频| 伊人天天综合| 亚洲毛片视频| 国产欧美亚洲日本| 亚洲成人资源| 国产农村妇女毛片精品久久麻豆| 久久综合电影一区| 欧美日韩亚洲一区三区 | 国产三级欧美三级| 欧美激情亚洲一区| 国产欧美日韩视频一区二区三区| 免费人成网站在线观看欧美高清| 欧美日韩亚洲网| 美女精品在线观看| 欧美午夜精品一区| 亚洲大片在线观看| 国产女优一区| 亚洲伦理在线观看| 亚洲国产成人精品女人久久久| 中文日韩欧美| 最新成人av网站| 亚洲欧美在线视频观看| 亚洲精一区二区三区| 久久精品系列| 久久成人人人人精品欧| 欧美日韩中文字幕日韩欧美| 欧美福利专区| 国语自产精品视频在线看8查询8| 一区二区激情| 一区二区不卡在线视频 午夜欧美不卡在 | 欧美日韩综合| 久久综合给合久久狠狠狠97色69| 欧美刺激性大交免费视频 | 99人久久精品视频最新地址| 久久精品一区二区三区不卡| 午夜精品偷拍| 国产精品jizz在线观看美国 | 久久久久久久久久码影片| 欧美一区二区| 在线视频国内自拍亚洲视频| 一区二区三区国产精华| 一区二区三区国产精品| 欧美激情视频免费观看| 欧美激情第4页| 亚洲国产精品视频| 久久在线91| 亚洲电影免费观看高清完整版在线| 国内成+人亚洲| 欧美一区二区高清在线观看| 久久精品国产亚洲一区二区三区| 国产精品网站在线播放| 先锋资源久久| 麻豆freexxxx性91精品| 亚洲国产成人在线| 欧美国产日韩一区二区| 亚洲激情一区二区| 亚洲一区二区三区高清不卡| 欧美视频专区一二在线观看| 亚洲色图自拍| 久久亚洲不卡| 91久久国产精品91久久性色| 欧美经典一区二区三区| 99精品福利视频| 欧美专区18| 亚洲国产cao| 欧美日韩亚洲一区二区三区在线观看 | 欧美日韩亚洲一区二区三区在线| 欧美激情在线免费观看| 99精品欧美一区二区三区综合在线| 欧美日韩成人精品| 亚洲性图久久| 免费久久99精品国产自| 99xxxx成人网| 国产美女诱惑一区二区| 久久婷婷久久一区二区三区| 亚洲青色在线| 久久精品国产亚洲一区二区| 亚洲激情综合| 国产欧美日本| 女人香蕉久久**毛片精品| 一区二区三区精品国产| 裸体女人亚洲精品一区| 亚洲一区免费| 亚洲黄色天堂| 国产精品入口日韩视频大尺度| 久久青草久久| 中国日韩欧美久久久久久久久| 久久久精品国产免费观看同学| 日韩视频免费观看高清在线视频| 欧美午夜宅男影院在线观看| 久久精品色图| 亚洲天堂免费观看| 欧美国产日韩一区| 久久精品亚洲一区二区| 一本久久a久久免费精品不卡| 国产一区二区欧美日韩| 欧美日韩日日骚| 久热综合在线亚洲精品| 亚洲摸下面视频| 99精品视频免费观看视频| 欧美成人一区在线| 久久久久久成人| 亚洲欧美日韩在线综合| 免费欧美日韩国产三级电影| 一区二区视频在线观看| 欧美偷拍一区二区| 欧美成人一区二区| 久久久五月天| 久久精品中文字幕免费mv| 亚洲欧美怡红院| 亚洲一区区二区| 亚洲色图综合久久| 日韩午夜三级在线|