`
mmdev
  • 浏览: 13244287 次
  • 性别: 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的安装文件

图2 要准备的安装文件

第1步安装j2sdk 进入欢迎画面


图3 j2SE安装界面1

第2步接受相关协议条款,然后选择Next


图4 j2SE安装界面2

第3步 选择安装路径,默认为c:/j2sdk1.4.2_05 ,这里我们不变,选择Next,(这个路径很重要,如果我们改变了,一定要记住)。


图5 j2SE安装界面3

第4步 系统会自动拷贝文件


图6 j2SE安装界面4

第5步 安装完成 单击finish。


图7 j2SE安装界面5


图8 j2SE安装之后的目录结构

第6步 安装Tomcat 5.0,首先进入欢迎界面,单击Next。

图9 Tomcat 安装界面1

第7步 接受相关协议条款,然后选择Next


图10 Tomcat 安装界面2

第8步 选择完全安装Full,然后选择Next


图11 Tomcat 安装界面3

第9步 确定安装目录,这里我们确定为C:Tomcat 5.0,然后选择Next


图12 Tomcat 安装界面4

第10步 确定Web服务器管理员的用户名和密码以及默认的端口,,然后选择Next

用户名 admin

密码 123 (要记住该密码用于对服务器的各种管理)

默认端口 8080


图13 Tomcat 安装界面5

第11步 确定java虚拟机的所在路径,,然后选择Next

路径 C:/j2sdk1.4.2_05 (和我们之前安装JDK的路径要一致)


图14 Tomcat 安装界面6

第12步 系统自动拷贝文件。

图15 Tomcat 安装界面7

第13步 安装完成,系统提示是否马上运行,单击Finish,我们会在屏幕的右下角看到Tomcat 5.0的小图标。


图16 Tomcat 安装界面7

第14步 双击屏幕右下角Tomcat 5.0图标,系统会弹出Tomcat运行窗口,在这个窗口中单击Start开启服务,到此Tomcat 5.0安装完成,可以通过再Web浏览器中输入http://127.0.0.1:8080 检测到欢迎的画面


图17 Tomcat 安装界面8


图18 Tomcat 欢迎画面

安装完成Tomcat以后,下面的工作就是要把磁盘上的文件夹共享为互联网中的虚拟目录,用于客户端的访问。我们在D:创建如下的文件夹结构:

D:mygameWeb (这个目录将作为对外部的虚拟目录用来存放共享的各种资源)


图19 虚拟目录结构

在浏览器中单击页面左上第三项 Tomcat Manager,这是系统会弹出一个窗口要求我们输入Tomcat 管理的用户名和密码,输入用户名admin 密码123 后,按确定进入Web服务器管理页面。


图20 用户管理登陆窗口

图21 Tomcat 管理窗口

在管理界面中的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/back0.png

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/back0.png

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) {}

}

}

笔者邮箱:sdhjob@163.com

本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/sdhjob/archive/2006/09/14/1221743.aspx

分享到:
评论

相关推荐

    J2ME网络编程以及网络游戏的实现

    **J2ME网络编程及其在网络游戏实现中的应用** J2ME(Java 2 Micro Edition)是Java 2的一个子集,专为消费类电子设备设计,如手机、可视电话、数字电视盒和车载导航系统等。J2ME的出现使得跨平台的软件开发成为可能...

    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