`
isiqi
  • 浏览: 16854899 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

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 = "http://127.0.0.1/515game/back0.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) {}

  }

  }

分享到:
评论

相关推荐

    j2me网络编程以及网络游戏的实现.doc

    【J2ME网络编程及其在网络游戏中的应用】 J2ME(Java 2 Micro Edition)是Java 2的一个子集,专为嵌入式设备和移动设备设计,如手机、智能电视和车载信息娱乐系统等。它提供了一个轻量级的运行环境,允许开发者创建...

    J2ME游戏编程ydaima.rar

    《J2ME游戏编程》是一本专注于教授如何利用Java Micro Edition(J2ME)平台开发游戏的书籍。J2ME是Java技术的一个分支,主要用于移动设备和嵌入式系统,如早期的智能手机、功能手机以及某些家用电器。本书旨在帮助...

    J2ME游戏编程

    8. **网络功能**:J2ME支持联网游戏,通过Socket编程或HTTP协议,实现多玩家对战或游戏数据同步。 9. **文件I/O**:保存游戏进度、配置文件等,通常使用RecordStore API进行本地数据存储。 10. **优化技巧**:为了...

    j2me游戏编程源码

    Java 2 Micro Edition(J2ME)是一种专为资源有限的设备,如移动电话和嵌入式系统设计的Java平台。...对每个示例进行深度剖析,理解其背后的逻辑和实现方式,将有助于你掌握J2ME游戏编程的核心技能。

    J2ME手机游戏编程入门

    7. **网络功能**:J2ME支持联网功能,可以通过HTTP或者WAP协议连接到服务器,实现在线游戏、数据同步等功能。 8. **优化技巧**:由于资源限制,J2ME游戏开发需要特别关注性能优化,如避免不必要的对象创建,使用位...

    《J2me手机游戏编程入门》

    《J2ME手机游戏编程入门》是一本专为初学者设计的书籍,旨在引导读者进入移动设备游戏开发的世界。J2ME(Java 2 Micro Edition)是Java平台的一个子集,主要用于嵌入式设备和移动设备,如早期的智能手机和平板电脑。...

    精通J2ME无线编程.pdf

    此外,还会探讨网络编程,包括HTTP协议和无线通信协议如WAP,以及数据存储机制,如Record Management System (RMS)。 移动游戏开发也是本书的重要内容。J2ME的图形库提供了低级别的绘图操作,开发者可以利用这些API...

    J2ME手机编程源代码

    这个压缩包包含的是一系列J2ME手机游戏编程的源代码,是学习J2ME游戏开发的重要参考资料。通过实际分析这些源代码,开发者可以深入理解J2ME的编程机制,掌握游戏开发的核心技术。 在J2ME手机游戏中,主要涉及到以下...

    《J2ME游戏编程》源码

    《J2ME游戏编程》源码是一份专为学习J2ME(Java 2 Micro Edition)游戏开发设计的资源集合,旨在帮助开发者深入理解J2ME平台上的游戏编程原理和实践技巧。J2ME是Java平台上针对嵌入式设备和移动设备的一个子集,它在...

    J2me游戏编程中文超清完全版 附加随书全部源代码

    "J2ME游戏编程中文超清完全版" 提供了全面的学习资源,旨在帮助开发者深入理解 J2ME 游戏开发的各个方面。英文名 "J2ME&Gaming" 显然揭示了教程的主题,即利用 J2ME 技术创建游戏。 J2ME 的核心是 Mobile ...

    j2me游戏编程中一个星战的源码下载地址

    在深入探讨J2ME游戏编程中的“星战”游戏源码之前,我们首先需要了解J2ME(Java 2 Micro Edition)的基本概念及其在移动设备游戏开发中的应用。J2ME是Sun Microsystems(现已被Oracle收购)为嵌入式设备和消费类电子...

    J2ME手机扑克牌游戏

    本文将深入探讨J2ME技术、手机编程的基本原理以及扑克牌游戏的实现细节。 J2ME是Java平台的一个子集,专为资源有限的嵌入式设备如手机、电视和PDA设计。它由配置(Configurations)和 profiles(Profiles)组成,...

    Wireless Programming With J2ME J2ME 无线网络编程

    **标题解析:**《Wireless Programming With J2ME》是一本专注于J2ME(Java Micro Edition)技术在无线网络编程领域的专著。J2ME是Java平台的一个子集,主要用于开发和部署在移动设备、嵌入式系统以及物联网设备上的...

    精通J2ME无线编程

    通过J2ME,开发者可以创建在这些设备上运行的应用程序,实现丰富的功能,如游戏、通信服务和多媒体应用。 在本书中,作者深入探讨了J2ME的基础概念和技术,包括KVM(Java虚拟机)、MIDP(Mobile Information Device...

    j2me手机高级编程

    《J2ME手机高级编程》涉及的是Java 2 Micro Edition(J2ME)在移动设备上的高级应用开发,尤其关注无线通信、游戏开发、电子地图浏览、播放器实现、持久化存储、移动商务应用以及XML模型的应用。这些主题涵盖了移动...

    J2ME游戏编程-玛莉赛跑

    《J2ME游戏编程——玛莉赛跑》 在移动设备普及的年代,J2ME(Java 2 Micro Edition)作为早期的移动平台开发环境,为开发者提供了在各种小型设备上构建应用程序,尤其是游戏的强大工具。本文将深入探讨如何在...

    J2ME小游戏合集很实用

    8. **J2me手机泡泡堂游戏源码**:泡泡堂是一款多人在线对战游戏,它的J2ME实现则涉及到网络通信、游戏状态同步等问题,对于理解J2ME的网络编程和实时游戏设计非常有价值。 9. **落日恶魔游戏附源代码(J2ME)**:这款...

Global site tag (gtag.js) - Google Analytics