岁月联盟 · 中国技术网 本站主页 | 安全认证 | 用户服务 | 技术论坛
新闻快报 | 新手学堂 | 黑客特区 | 程序语言 | 数 据 库 | 防 火 墙 | 路由交换 | 系统集成 | 服 务 器 | 存储备份 | 考试认证
Windows | Linux | Java | 协议分析 | 问题解答 | 进程大全 | 网页设计 | 多 媒 体 | 图库资料 | 软件下载 | 站内下载
  您现在的位置: 岁月联盟 >> Java >> J2ME >> 嵌入式 >> Java正文
用Java自制手机联网游戏
作者:未知 文章来源:本站整理 点击数: 更新时间:2007-7-22 22:52:50

  移动通信的迅速发展,使手机用户越来越多。手机制造商诺基亚曾宣称,计划在2003年底之前销售1亿台使用Java软件的移动电话。与此同时,Internet的进一步发展也急切需要用手机实现一些PC能够完成的功能。本文介绍了一个可以在手机上运行的联网游戏程序。通过这个程序,无论在何地,只要手机能够上网就可以和Internet上的朋友联网游戏(图11)。下面对程序的一些细节做一简要介绍,希望能给从事Java开发的技术人员一些启示。
  J2ME简介
  J2ME(Java 2 Micro Edition)是Java 2的一个组成部分,它与J2SE、J2EE并称。根据Sun的定义:J2ME是一种高度优化的Java运行环境,主要针对消费类电子设备的,例如蜂窝电话和可视电话、数字机顶盒、汽车导航系统等等。J2ME技术在1999年的JavaOne Developer Conference大会上正式推出,它将Java语言的与平台无关的特性移植到小型电子设备上,允许移动无线设备之间共享应用程序。
  J2ME的构架
  J2ME的构架如图1、图2所示。
   
  图1 J2ME的构架1
   
  图2 J2ME的构架2
  程序运行的环境
  客户端即为手机(需支持J2ME的手机,例如motorola 388)用户,编程环境是Windows 2000 server + MotoJ2SDK+JDK1.3.1+MS SQL server2000,服务器端为Windows 2000 server+JDK1.3.1。
  J2ME编程流程
  以MotoJ2SDK的开发过程为例,其流程如下所示:
   
  图3 J2ME编程流程
  程序简介
  服务器端代码的编写
  客户端和服务器端采用Socket连接。服务器端需要时刻监听客户的请求(如图4),一旦有客户需求,它就需要马上响应(如图5),并做出相应的处理,然后将结果返回给客户,客户显示服务器处理结果(如图10)。
   
  图4 服务器监听8000端口
   
  图5 服务器接受到请求并响应请求
  服务器端程序代码如下:
  
  try{
   gameServer gServer = new gameServer();//创建一个主类实例
   gServer.newServerSocket(gServer.port);//监听gServer.port端口
   while(true)//时刻等待客户端连接。
   {
   gServer.con = gServer.server.accept();//一旦有客户的请求,则接收客户请求。
   multiRequest cThread=new multiRequest(gServer.gSocket);//为处理客户端请求建立线程。
   cThread.start();//启动线程处理客户端请求。
   }
  }catch(IOException e)//捕获异常。
  {
   System.out.println(“Creating socket error!!!”);
   System.exit(1);
  }
  以下为multiRequest类的部分代码:
  
  class multiRequest extends Thread
  {
   private Socket rSocket;
   private DataInputStream is;
   private DataOutputStream os;
   String strReceive=null;
   String strWhichService=null;
   Private intType;
   public multiRequest(Socket s)throws IOException//构造函数
   {
   rSocket = s;
   inType = 0;
   is = new DataInputStream(rSocket.getInputStream());//建立输入输出流。
   os = new DataOutputStream(rSocket.getOutputStream());
   }
   public void run()
   {
   try{
  strReceive=in.readUTF();
  strWhichService=strReceive.substring(0,2);
   //分离出用户向服务器发送子串的前两个字符,这个字符标志着用户请求的服务种类。
  if(strWhichService.equals(“/r”)) intType=1;//请求注册服务。
  else if(strWhichService.equals(“/s”) intType=2;//请求查询分数服务。
  else if(strWhichService.equals(“/5”) intType=3;//请求五子棋服务。
  ……//请求其它服务(略)
  switch(intType)
  {
  case 1: newUser();break;
  case 2: findByGradeByUserID();break;
  case 3: playWuzi();break;
  default 0:displayError();break;
  }
   }catch(IOException e){}
   finally
   {
  try{
  rSocket.close();
  }catch(IOException e){}
   }
   }
  …………//(略)
  }
  由于手机端硬件的限制,所以,复杂的查找和处理都由配置较好服务器端处理。这样手机端可以减轻负担,专职处理界面的美观,以赢取客户的喜爱。例如,手机用户提出查分数请求时,手机向服务器发出请求“/s:user”。服务器接收到该子串,首先分离为“/s”和“user”,“/s”表示查询分数,“user”表示用户的ID。这时服务器端就调用findByGradeByUserID(),该函数利用JDBC连接数据库查询用户成绩,并将查询结果发送给客户端。
  手机端编程
  手机端的编程其实是MIDlet编程。MIDlet的程序流程是这样的:构造函数→startApp()→监听事件、接收命令→commandAction()方法→调用别的方法→如果是exit()命令调用pauseApp()→destroyApp()方法。以图形表示MIDlet的生命周期如图6所示。实际上,MIDlet程序的运行流程和Applet程序的运行流程差不多。
   
  图6 生命周期
  
  手

[1] [2] 下一页


  • 上一个Java:
  • 下一个Java:
  •  
    热门文章
    推荐文章
    关于我们 | 发展历程 | 网站地图 | 广告服务 | 招贤纳士 | 战略合作 | 友情链接 | 著作声明 | 联系我们
    Copyright © 2002-2007 SYUE All rights reserved.
    E_mail:Admin@Syue.Com 皖ICP备05004589号
    未经授权禁止转载、摘编、复制或建立镜像.如有违反,追究法律责任.
    传世私服 传奇世界私服 天龙八部私服 bet365 传世私服 天龙八部私服 热血江湖私服 英雄合击传奇私服 热血江湖私服 bet365 bet365