<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 22,comments - 35,trackbacks - 0
    簡(jiǎn)介:
        實(shí)時(shí)網(wǎng)絡(luò)游戲也屬于大型應(yīng)用程序范疇,一個(gè)關(guān)鍵環(huán)節(jié)就是建立實(shí)時(shí)主動(dòng)通信環(huán)境,在此Socekt API就成為了首選。通過(guò)調(diào)用XMLSocket方法,F(xiàn)LASH就可以和一些由強(qiáng)大語(yǔ)言編寫(xiě)的服務(wù)器應(yīng)用程序進(jìn)行通信,進(jìn)而開(kāi)發(fā)出各種實(shí)時(shí)信息交流系統(tǒng)......

    本文分兩部分:FLASH編程 和 Java編程,此文記錄的僅僅是我在探索中的一些收獲,其中用了很多個(gè)人化的描述語(yǔ)言,并不是業(yè)界標(biāo)準(zhǔn)的用語(yǔ)。 :)

    探索筆記:

    目前國(guó)內(nèi)Flash應(yīng)用大部分還是在制作精美的動(dòng)畫(huà)方面,但據(jù)我了解早在Flash4 的時(shí)代,國(guó)外一些人就已經(jīng)開(kāi)始將flash技術(shù)運(yùn)用于開(kāi)發(fā)動(dòng)態(tài)網(wǎng)站(和php、asp、jsp結(jié)合)和開(kāi)發(fā)應(yīng)用程序(象網(wǎng)絡(luò)游戲、遠(yuǎn)程管理等應(yīng)用軟件)的項(xiàng)目中了。而直到今日,這方面在國(guó)內(nèi)發(fā)展還是比較緩慢(有一部分原因是少數(shù)人掌握了關(guān)鍵技術(shù),但不愿意共享出來(lái))。因此,我將致力于推動(dòng)國(guó)內(nèi)flash技術(shù)在開(kāi)發(fā)動(dòng)態(tài)網(wǎng)站和開(kāi)發(fā)應(yīng)用程序方面的發(fā)展,并將自己親手寫(xiě)的代碼公布到網(wǎng)絡(luò)中,以便于大家共享、交流。

    涉及到的知識(shí)范疇:

    1. socket概念
    2. java編程語(yǔ)言
    3. Flash MX ActionScript中的XMLSocket

    實(shí)時(shí)網(wǎng)絡(luò)游戲也屬于大型應(yīng)用程序范疇,一個(gè)關(guān)鍵環(huán)節(jié)就是建立實(shí)時(shí)主動(dòng)通信環(huán)境(相對(duì)的,有個(gè)稱(chēng)為被動(dòng)通。信的方式,最好的例子就是你正在用IE瀏覽器瀏覽一個(gè)網(wǎng)站,此時(shí)瀏覽器和服務(wù)器之間就是被動(dòng)通信方式:如果你不點(diǎn)擊一個(gè)連接,發(fā)送一個(gè)WEB頁(yè)面請(qǐng)求到WEB服務(wù)器,WEB服務(wù)器是不會(huì)主動(dòng)向你的瀏覽器發(fā)送任何頁(yè)面的)。在此Socekt API就成為了首選。限于篇幅,這里不再過(guò)多解釋socket的含義,只希望大家能記住一點(diǎn),只要建立能夠?qū)崟r(shí)通信的應(yīng)用程序就需要建立socket連接。

    【客戶(hù)端FLASH編程部分】

    從mx自帶的as字典中可以看出,F(xiàn)lash在網(wǎng)絡(luò)通信方面得到了非常大的加強(qiáng)。"The XMLSocket object is useful for client-server applications that require low latency, such as real-time chat systems"注意最后的一小段話:such as real-time chat systems(譯文:例如實(shí)時(shí)聊天系統(tǒng))

    通過(guò)調(diào)用XMLSocket方法FLASH就可以和一些由強(qiáng)大語(yǔ)言編寫(xiě)的服務(wù)器應(yīng)用程序進(jìn)行通信,進(jìn)而開(kāi)發(fā)出各種實(shí)時(shí)信息交流系統(tǒng)。所以我們的目標(biāo)鎖定在XMLSocket!

    另外值得注意的是:有很多人一看到XMLSocket前面的XML三個(gè)字母,就覺(jué)得頭疼,以為必須先熟悉甚至精通XML才能使用這個(gè)對(duì)象及其方法,但我要說(shuō)的是在你不太了解XML的階段,只要把XML信息看成是一個(gè)隨意長(zhǎng)度(>0)的字符串,把XMLSocket看成是一個(gè)只是用來(lái)發(fā)送字符串?dāng)?shù)據(jù)的對(duì)象就好辦多了。

    我們還是從分析代碼著手,來(lái)跨進(jìn)開(kāi)發(fā)FLASH實(shí)時(shí)網(wǎng)絡(luò)游戲的大門(mén)吧:

    //建立XMLSocket對(duì)象
    var mySocket = new XMLSocket();
    mySocket.connect("127.0.0.1",3000);
    //測(cè)試建立socket連接是否成功
    mySocket.onConnect = function(success) {
      if(success) {
        trace("connect ok"); 
      } else {
        trace("connect failed");
      }
    }
    //End for 測(cè)試是否連接成功 

    成功建立連接后 向服務(wù)器端發(fā)送一個(gè)測(cè)試用的字符串,以便服務(wù)器端能顯示出信息。

    mySocket.send("this is a testing String !!!");

    FLASH中的程序就先到此,因?yàn)槭腔A(chǔ)篇,所以不會(huì)涉及太多的其他東西,呵呵。

    【服務(wù)器端java程序部分】

    import java.io.*;
    import java.net.*;
    public class LocalServer {
      protected int listenPort = 3000;
      public void acceptConnections() {
      try {
        ServerSocket server = new ServerSocket(this.listenPort);
        //在服務(wù)器端,我們需要ServerSocket對(duì)象以便建立服務(wù),參數(shù)是兼聽(tīng)的端口號(hào)
        Socket incomingConnection = null;//創(chuàng)建一個(gè)客戶(hù)端的Socket變量,以接收從客戶(hù)端監(jiān)聽(tīng)到的Socket
        handleConnection處理
        System.out.println("Server端正在等待一個(gè)socket連接......");
        incomingConnection = server.accept();//調(diào)用該 ServerSocket 的 accept()來(lái)告訴它開(kāi)始偵聽(tīng)
        System.out.println("一個(gè)socket客戶(hù)端已經(jīng)連接過(guò)來(lái)......");
        handleConnection(incomingConnection);
        } catch (BindException e) {
          System.out.println("Unable to bind to port " + listenPort);
          }
      catch (IOException e) {
        System.out.println("Unable to instantiate a ServerSocket on port: " + listenPort);
        }
      }
      public void handleConnection(Socket incomingConnection) {
        System.out.println("\r\n正在對(duì)此連接進(jìn)行處理......");
        try {//首先獲取同Socket相關(guān)聯(lián)的流outputToSocket和InputStream
    //其中outputToSocket是要返回給客戶(hù)端Socket的流
    //InputStream是客戶(hù)端發(fā)來(lái)的請(qǐng)求
          otputStream outputToSocket = incomingConnection.getOutputStream();
          InputStream inputFromSocket = incomingConnection.getInputStream();
          BufferedReader streamReader = new BufferedReader(new InputStreamReader(inputFromSocket));
    //首先要將InputStream轉(zhuǎn)換到BufferedReader中
          String line = null;
          while ((line = streamReader.readLine()) != null) {
            System.out.println(line); 
            //從streamReader中讀出信息,直接輸出到默認(rèn)輸出設(shè)備中(本例中是指dos窗口)
          }
        System.out.println("\r\n\r\n接受信息完畢!");
    //完成之后關(guān)閉所有流,注意關(guān)閉Socket流的順序
        streamReader.close();
        } catch (Exception e) {
          System.out.println("Error handling a client: " + e);
        }
      }
    //主程序,建立sever實(shí)例對(duì)象,然后運(yùn)行對(duì)象的acceptConnections()方法
      public static void main(String[] args) {
        LocalServer server = new LocalServer();
        server.acceptConnections();
      }
    }

    java服務(wù)端程序就到此為止了,此時(shí)已經(jīng)能夠建立起一個(gè)最簡(jiǎn)單的C/S結(jié)構(gòu)通信體系。

    在此基礎(chǔ)上再增加適當(dāng)?shù)臇|西 就能夠開(kāi)發(fā)出任何應(yīng)用程序或者網(wǎng)絡(luò)游戲。

    posted on 2011-12-06 10:38 kelven 閱讀(280) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): java
    主站蜘蛛池模板: 香蕉免费看一区二区三区| 免费a级毛片无码a∨免费软件 | 黑人粗长大战亚洲女2021国产精品成人免费视频| 黄页网站免费在线观看| 亚洲精品一级无码中文字幕| 亚洲尹人九九大色香蕉网站| 免费观看又污又黄在线观看| 日韩免费观看的一级毛片| 亚洲美女色在线欧洲美女| 精品国产福利尤物免费| 久久亚洲精品无码播放| 日韩国产欧美亚洲v片| 亚洲精品动漫免费二区| 亚洲国产成人久久精品影视| 日本精品久久久久久久久免费| 亚洲AV无码乱码在线观看牲色| 亚洲制服丝袜中文字幕| 久草免费福利资源站| 国产av无码专区亚洲av果冻传媒 | 国产免费久久精品99久久| 伊人久久亚洲综合| 午夜视频在线免费观看| 国产性爱在线观看亚洲黄色一级片 | 久久国产一片免费观看| 久久香蕉国产线看观看亚洲片| 在线观看免费视频一区| 亚洲一区二区高清| 污网站在线免费观看| 中文字幕不卡亚洲| 亚洲一区二区三区免费观看| 久久久久亚洲AV无码专区体验| 91免费资源网站入口| 男女猛烈激情xx00免费视频| 亚洲国产精品一区二区久久| 免费无码又黄又爽又刺激| 亚洲国产日韩女人aaaaaa毛片在线| 亚洲视频免费在线播放| 亚洲伊人精品综合在合线| 免费看国产精品麻豆| 免费又黄又爽又猛大片午夜| 亚洲最新永久在线观看|