程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> J2ME >> J2ME網絡編程以及網絡游戲的實現

J2ME網絡編程以及網絡游戲的實現

編輯:J2ME
J2ME(Java 2 Micro Edition)是Java 2的一個組成部分,是一種高度優化的Java運行環境,重要針對花費類電子設備的,例如蜂窩電話、可視電話、數字機頂盒和汽車導航系統等等。即J2ME是為花費電子產品和手持設備量身定制的Java專用版本。

  J2ME的呈現使開發跨平台的花費類電子產品的利用軟件成為可能。Java語言的與平台無關的特征移植到小型電子設備上,答應移動無線設備之間共享利用程序。它供給了基於HTTP的高級Internet協議,使移動電話能以Client/Server方法直接拜訪Internet的全部信息,從而使得不同的ClIEnt拜訪不同的資源。

  隨著網絡技巧的發展,在將來的無線通信時代中,大批的網絡利用程序將被開發出來往滿足無線移動通信的請求,而要充分的施展無線移動通信設備的通信才能,J2ME網絡編程就變得尤為重要。

  一、應用Tomcat搭建Web服務器

  

  圖1 網絡利用模型

  盡大多數的網絡利用都是將數據信息保留到DB Server(數據庫服務器),通過Web Server和諧各種客戶真個懇求與響應,存取數據庫中的數據。數據庫服務器和Web服務器可能是網絡中的1台或多台的設備;客戶端可以通過網際中的通用協議(如http協議)對服務器端進行拜訪,客戶端或者是pc上的web浏覽器,或者是移動設備,只要能支撐網絡通信的協議就應當能夠准確獲取服務器真個資源。

  我們首先先容一下應用Tomcat搭鍵web服務器,在安裝Tomcat 5。0之前首先要下載

  j2sdk 、Tomcat 5.0的安裝文件

  第1步安裝j2sdk 進進歡迎畫面

  第2步接收相干協議條款,然後選擇Next

  第3步 選擇安裝路徑,默認為c:\j2sdk1.4.2_05 ,這裡我們不變,選擇Next,(這個路徑很重要,假如我們轉變了,必定要記住)。

  第4步 系統會主動拷貝文件

  第5步 安裝完成 單擊finish。

  第6步 安裝Tomcat 5.0,首先進進歡迎界面,單擊Next。

  第7步 接收相干協議條款,然後選擇Next

  第8步 選擇完整安裝Full,然後選擇Nextt 安裝界面2

  第9步 斷定安裝目錄,這裡我們斷定為C:Tomcat 5.0,然後選擇Next

  第10步 斷定Web服務器治理員的用戶名和密碼以及默認的端口,,然後選擇Next

  用戶名 admin

  密碼 123 (要記住該密碼用於對服務器的各種治理)

  默認端口 8080

  第11步 斷定Java虛擬機的所在路徑,,然後選擇Next

  路徑 C:\j2sdk1.4.2_05 (和我們之前安裝JDK的路徑要一致)

  第12步 系統主動拷貝文件。

  第13步 安裝完成,系統提示是否馬上運行,單擊Finish,我們會在屏幕的右下角看到Tomcat 5.0的小圖標。

  第14步 雙擊屏幕右下角Tomcat 5.0圖標,系統會彈出Tomcat運行窗口,在這個窗口中單擊Start開啟服務,到此Tomcat 5.0安裝完成,可以通過再Web浏覽器中輸進http://127.0.0.1:8080 檢測到歡迎的畫面

安裝完成Tomcat以後,下面的工作就是要把磁盤上的文件夾共享為互聯網中的虛擬目錄,用於客戶真個拜訪。我們在D:創立如下的文件夾結構:

  D:mygameWeb (這個目錄將作為對外部的虛擬目錄用來存放共享的各種資源)

  在浏覽器中單擊頁面左上第三項 Tomcat Manager,這是系統會彈出一個窗口請求我們輸進Tomcat 治理的用戶名和密碼,輸進用戶名admin 密碼123 後,按斷定進進Web服務器治理頁面。

  在治理界面中的Deploy面板我們輸進以下信息:

  Context Path(optional): /515game (虛擬目錄的名稱)

  XML Configuration file URL:

  WAR or Directory URL: file:d:/mygameWeb (真實的文件夾留心格局和大小寫不要錯)

  填寫完成以後單擊 Deploy 宣布虛擬目錄

  大功告成,我們可以把資源放到d:mygameWeb這個目錄下面通過

  http://IP地址:8080/515game/資源名稱就可以拜訪這個服務器上的資源了,

  如:http://127.0.0.1:8080/515game/myweb.Html

  http://127.0.0.1:8080/515game/kk.wav

  假如這台主機在公網的IP地址為221.196.125.11 在互聯網中可以過以下地址來拜訪:

  http://221.196.125.11:8080/515game/myweb.Html

  http://221.196.125.11:8080/515game/kk.wav

  在J2ME中供給了拜訪網絡的相干類,封裝到了Javax.microedition.io裡面供給了相干類,下面我們通過實例先容假如通過GCF來讓J2ME的客戶端獲取Web服務器緞的資源

  二、從Web獲取文字信息

  import Javax.microedition.midlet.*;

  import Javax.microedition.io.*;

  import Java.io.*;

  import Javax.microedition.lcdui.*;

  public class getHttp

  extends MIDlet {

   public void startApp() {

    try {

     //打開網絡連接

     String url = "http://127.0.0.1/515game/myweb.Html";

     StreamConnection sc = (StreamConnection) Connector.open(url);

     //讀取數據

     InputStream is = sc.openInputStream();

     int tmp = 0;

     String get = "";

     while (tmp != -1) { //-1代表結束

      tmp = is.read();

      get = get + (char) tmp;

     }

    is.close();

    Form f = new Form(url);

    //解決中文標題

    String chinese = new String(get.getBytes("iso8859-1"), "utf-8");

    f.append(chinese);

    Display.getDisplay(this).setCurrent(f);

    //封閉網絡連接

    sc.close();

   }

   catch (Exception e) {}

  }

  public void pauseApp() {}

  public void destroyApp(boolean f) {}

  }

三、從Web獲取圖片信息

  import Javax.microedition.midlet.*;

  import Javax.microedition.lcdui.*;

  import Javax.microedition.io.*;

  import Java.io.*;

  public class testPic

  extends MIDlet {

   public void startApp() {

    try {

     //打開網絡連接

     String url = "/School/UploadFiles_7810/201105/20110520224403455.png";

     StreamConnection sc = (StreamConnection) Connector.open(url);

     //獲取圖片

     InputStream is = sc.openInputStream();

     Image im = Image.createImage(is);//該方法為MIDP 2.0方法

     Form f = new Form(url);

     f.append(im);

     Display.getDisplay(this).setCurrent(f);

     //封閉連接

     sc.close();

    }

    catch (Exception e) {}

   }

   public void pauseApp() {}

   public void destroyApp(boolean f) {}

  }

  四、從Web獲取多媒體信息

  import Javax.microedition.lcdui.*;

  import Javax.microedition.midlet.*;

  import Javax.microedition.io.*;

  import Java.io.*;

  import Javax.microedition.media.*;

  public class getMusic

  extends MIDlet {

   public void startApp() {

    try {

     //打開網絡連接

     String url = "http://127.0.0.1/515game/kk.wav";

     StreamConnection sc = (StreamConnection) Connector.open(url);

     //獲取聲音

     InputStream is = sc.openInputStream();

     Player p1 = Manager.createPlayer(is, "audio/x-wav");

     p1.start();

     //封閉網絡連接

     sc.close();

     System.out.println("sound is play");

    }

    catch (Exception e) {

     e.printStackTrace();

    }

   }

   public void pauseApp() {}

   public void destroyApp(boolean f) {}

  }

  五、基於http的用戶登陸系統實現

  服務器端程序

  checkuser.JSP 這個文件放到d:/ mygameWeb目錄下面

  <%

   //得到用戶名

   String name=request.getParameter("username");

   //得到密碼

   String pass=request.getParameter("passWord");

   if(name.equals("ldh"))

   {

    if(pass.equals("zhm"))

    {

     out.print("welcome ");

    }

    else

    {

     out.print("pass Word error");

    }

   }

   else

   {

 out.print("user name error");

   }

  %>

  客戶端程序

  import Javax.microedition.midlet.*;

  import Javax.microedition.lcdui.*;

  import Javax.microedition.io.*;

  import Java.io.*;

  public class logoIN

  extends MIDlet

  implements CommandListener, Runnable {

   public Form f;

   public TextFIEld user; //用戶名

   public TextFIEld pass; //密碼

   public Command c1;

   public logoIN() {

    f = new Form("傳奇世界用戶登陸");

    user = new TextField("用戶名", "", 10, TextFIEld.ANY);

    pass = new TextField("密碼", "", 8, TextFIEld.PASSWord);

    f.append(user);

    f.append(pass);

    c1 = new Command("斷定", Command.SCREEN, 1);

    f.addCommand(c1);

    f.setCommandListener(this);

    Display.getDisplay(this).setCurrent(f);

   }

   public void startApp() {}

   public void pauseApp() {}

   public void destroyApp(boolean f) {}

   public void commandAction(Command c, Displayable dd) {

    Thread t = new Thread(this);

    t.start(); //啟動線程連結網絡

   }

   //完成網絡懇求

   public void run() {

    try {

     //打開網絡

     String url = "http://127.0.0.1/515game/checkuser.JSP?username=" +

     user.getString() + "&passWord=" + pass.getString();

     //獲取數據

     StreamConnection sc = (StreamConnection) Connector.open(url);

     InputStream is = sc.openInputStream();

     int tmp = 0;

     String get = "";

     while ( (tmp = is.read()) != -1) {

      get = get + (char) tmp;

     }

     Form f2 = new Form("登陸成果");

     f2.append(get);

     Display.getDisplay(this).setCurrent(f2);

     //封閉網絡

     sc.close();

    }

    catch (Exception e) {}

   }

  }

  六、一個網絡游戲實例

  下面我們通過一個網絡猜價格的游戲實例來闡明如何通過J2ME同服務器端交換數據。

  這是一個網絡版商品競猜的實例,客戶端輸進商品價格,在服務器端負責游戲邏輯的處理。

  服務器端代碼:

  Guess.JSP 這個文件放到d:/ mygameWeb目錄下面

  <%

   String sjg=request.getParameter("jg");

   int jg=(int)(Math.random()*10);

   int userjg=Integer.parseInt(sjg);

if(userjg>jg)

   {

    out.println("sorry da le");

   }

   if(userjg<jg)

   {

    out.println("sorry xiao le");

   }

   if(userjg==jg)

   {

    out.println("right");

   }

  %>

  J2ME客戶端代碼:

  import Javax.microedition.midlet.*;

  import Javax.microedition.lcdui.*;

  import Javax.microedition.io.*;

  import Java.io.*;

  public class GuessGame

  extends MIDlet

  implements CommandListener, Runnable {

   public Form f, f2;

   public TextFIEld tf1;

   public Display d;

   public Command c1, c2;

   public GuessGame() {

    f = new Form("商品競猜");

    f2 = new Form("競猜成果");

    c2 = new Command("返回", Command.SCREEN, 1);

    f2.addCommand(c2);

    f2.setCommandListener(this);

    tf1 = new TextField("請輸進商品價格1-9", "", 1, TextFIEld.NUMERIC);

    f.append(tf1);

    c1 = new Command("斷定", Command.SCREEN, 1);

    f.addCommand(c1);

    f.setCommandListener(this);

    d = Display.getDisplay(this);

   }

   public void startApp() {

    d.setCurrent(f);

   }

   public void pauseApp() {}

   public void destroyApp(boolean f) {}

   public void commandAction(Command c, Displayable d) {

   if (c == c1) { //啟動網絡懇求

    (new Thread(this)).start();

   }

   if (c == c2) {

    this.d.setCurrent(f);

   }

  }

  public void run() {

   try {

    //打開網絡連接

    String url = "http://127.0.0.1/515game/Guess.JSP?jg="+ tf1.getString();

    StreamConnection sc = (StreamConnection) Connector.open(url);

    //獲取懇求成果

    InputStream is = sc.openInputStream();

    int tmp = 0;

    String get = "";

    while ( (tmp = is.read()) != -1) {

     get = get + (char) (tmp);

    }

    for (int i = 0; i < f2.size(); i++) {

     f2.delete(i);

    }

    f2.append(get);

    d.setCurrent(f2);

    //封閉網絡連接

    sc.close();

   }

   catch (Exception e) {}

  }

  }

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved