FLASH+JAVA開發實時網絡遊戲

 本文分兩部分:FLASH編程 和 Java編程,此文記錄的僅僅是我在探索中的一些收穫,其中用了很多個人化的描述語言,並不是業界標準的用語。 :)

探索筆記:  

目前國內Flash應用大部分還是在製作精美的動畫方面,但據我瞭解早在Flash4 的時代,國外一些人就已經開始將flash技術運用於開發動態網站(和php、asp、jsp結合)和開發應用程序(象網絡遊戲、遠程管理等應用軟件)的項目中了。而直到今日,這方面在國內發展還是比較緩慢(有一部分原因是少數人掌握了關鍵技術,但不願意共享出來)。因此,我將致力於推動國內flash技術在開發動態網站和開發應用程序方面的發展,並將自己親手寫的代碼公佈到網絡中,以便於大家共享、交流。

涉及到的知識範疇:

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

實時網絡遊戲也屬於大型應用程序範疇,一個關鍵環節就是建立實時主動通信環境(相對的,有個稱爲被動通。信的方式,最好的例子就是你正在用IE瀏覽器瀏覽一個網站,此時瀏覽器和服務器之間就是被動通信方式:如果你不點擊一個連接,發送一個WEB頁面請求到WEB服務器,WEB服務器是不會主動向你的瀏覽器發送任何頁面的)。在此Socekt API就成爲了首選。限於篇幅,這裏不再過多解釋socket的含義,只希望大家能記住一點,只要建立能夠實時通信的應用程序就需要建立socket連接。

【客戶端FLASH編程部分】

從mx自帶的as字典中可以看出,Flash在網絡通信方面得到了非常大的加強。“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(譯文:例如實時聊天系統)

通過調用XMLSocket方法FLASH就可以和一些由強大語言編寫的服務器應用程序進行通信,進而開發出各種實時信息交流系統。所以我們的目標鎖定在XMLSocket!

另外值得注意的是:有很多人一看到XMLSocket前面的XML三個字母,就覺得頭疼,以爲必須先熟悉甚至精通XML才能使用這個對象及其方法,但我要說的是在你不太瞭解XML的階段,只要把XML信息看成是一個隨意長度(>0)的字符串,把XMLSocket看成是一個只是用來發送字符串數據的對象就好辦多了。

我們還是從分析代碼着手,來跨進開發FLASH實時網絡遊戲的大門吧:

  1. //建立XMLSocket對象
  2. var mySocket = new XMLSocket();
  3. mySocket.connect("127.0.0.1",3000);
  4. //測試建立socket連接是否成功
  5. mySocket.onConnect = function(success) {
  6.   if(success) {
  7.     trace("connect ok");  
  8.   } else {
  9.     trace("connect failed");
  10.   }
  11. }
  12. //End for 測試是否連接成功  
  13.   
複製代碼

成功建立連接後 向服務器端發送一個測試用的字符串,以便服務器端能顯示出信息。

  1. mySocket.send("this is a testing String !!!");
複製代碼

FLASH中的程序就先到此,因爲是基礎篇,所以不會涉及太多的其他東西,呵呵。

【服務器端java程序部分】

  1. import java.io.*;
  2. import java.net.*;
  3. public class LocalServer {
  4.   protected int listenPort = 3000;
  5.   public void acceptConnections() {
  6.   try {
  7.     ServerSocket server = new ServerSocket(this.listenPort);//在服務器端,我們需要ServerSocket對象以便建立服務,
  8. 參數是兼聽的端口號
  9.     Socket incomingConnection = null;//創建一個客戶端的Socket變量,以接收從客戶端監聽到的Socket
  10.     handleConnection處理
  11.     System.out.println("Server端正在等待一個socket連接......");
  12.     incomingConnection = server.accept();//調用該 ServerSocket 的 accept()來告訴它開始偵聽
  13.     System.out.println("一個socket客戶端已經連接過來......");
  14.     handleConnection(incomingConnection);
  15.     } catch (BindException e) {
  16.       System.out.println("Unable to bind to port " + listenPort);
  17.       }
  18.   catch (IOException e) {
  19.     System.out.println("Unable to instantiate a ServerSocket on port: " + listenPort);
  20.     }
  21.   }
  22.   public void handleConnection(Socket incomingConnection) {
  23.     System.out.println("/r/n正在對此連接進行處理......");
  24.     try {//首先獲取同Socket相關聯的流outputToSocket和InputStream
  25. //其中outputToSocket是要返回給客戶端Socket的流
  26. //InputStream是客戶端發來的請求
  27.       otputStream outputToSocket = incomingConnection.getOutputStream();
  28.       InputStream inputFromSocket = incomingConnection.getInputStream();
  29.       BufferedReader streamReader = new BufferedReader(new InputStreamReader(inputFromSocket));
  30. //首先要將InputStream轉換到BufferedReader中
  31.       String line = null;
  32.       while ((line = streamReader.readLine()) != null) {
  33.         System.out.println(line); //從streamReader中讀出信息,直接輸出到默認輸出設備中(本例中是指dos窗口)
  34.       }
  35.     System.out.println("/r/n/r/n接受信息完畢!");
  36. //完成之後關閉所有流,注意關閉Socket流的順序
  37.     streamReader.close();
  38.     } catch (Exception e) {
  39.       System.out.println("Error handling a client: " + e);
  40.     }
  41.   }
  42. //主程序,建立sever實例對象,然後運行對象的acceptConnections()方法
  43.   public static void main(String[] args) {
  44.     LocalServer server = new LocalServer();
  45.     server.acceptConnections();
  46.   }
  47. }
  48.   
複製代碼

java服務端程序就到此爲止了,此時已經能夠建立起一個最簡單的C/S結構通信體系。

在此基礎上再增加適當的東西 就能夠開發出任何應用程序或者網絡遊戲。

本教程爲:彩色狐狸(changsir)所有,如要轉載請指明出處和作者

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章