`
baobaoupup
  • 浏览: 471888 次
文章分类
社区版块
存档分类
最新评论

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 50之前首先要下载

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

分享到:
评论

相关推荐

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

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

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

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

    J2ME手机游戏开发(可蓝牙对战网络编程)

    制作的基于J2ME下的手机游戏编程源码,可以实现基本的体积碰撞,蓝牙对战,关卡实现等,对于J2ME初学者有很大帮助

    J2ME-Servlet手机网络纸牌游戏.rar

    该程序涉及了多线程、网络编程,客户端和服务器的网络通讯构架是程序的核心,不是我凭空写的,是看懂了书上的例程(3000行代码),从中取出来的,然后在上面实现了我的blackjack纸牌游戏 开发工具 myeclipse (添加j2me...

    基于Java ME无线网络移动端的俄罗斯方块游戏的实现

    基于Java ME无线网络移动端的俄罗斯方块游戏的设计与实现项目是一款基于Java ME无线网络移动端开发的俄罗斯方块游戏,主要应用Java ME技术和J2ME SDK开发包,实现了俄罗斯方块游戏的无线网络移动端版本,更方便玩家...

    Java毕业设计-JAVA基于J2ME的手机游戏开发(论文+源代码).rar

    源代码部分包含了游戏的全部实现代码,包括游戏界面设计、游戏逻辑处理、网络通信等关键模块。代码结构清晰,注释详细,易于理解和修改。开发者可以根据自己的需求和兴趣,对项目进行二次开发和定制,扩展游戏功能或...

    基于java的手机游戏开发与设计.doc

    7 4.2、关于JDK 7 4.3、关于WTK 8 4.4、关于Eclipse与EclipseMe 9 5、游戏的具体实现和程序分析 11 5.1、游戏工程及程序的建立 11 5.2、手机中的坐标系 13 5.3、游戏的具体实现环节 14 5.4、具体编程的实现 ...

    java源码包实例源码JAVA开发源码50个合集.zip

    JAVA实现CLDC与MIDP底层编程的代码.rar Java实现HTTP连接与浏览,Java源码下载.rar Java实现的FTP连接与数据浏览程序.rar Java实现的放大镜效果附有源文件.rar Java实现的点对点短消息发送协议(smpp)开发包源码.rar ...

    java源码包---java 源码 大量 实例

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    h_JAVA 2应用编程150例.rar

    第4章 Java网络编程 125 实例45 选择字体 126 实例46 UDP与TCP/IP的简单应用 129 实例47 聊天室 131 实例48 浏览FTP 136 实例49 局域网广播 147 实例50 建立HTTP连接 151 实例51 迷你浏览器 152 实例52 扫描应用端口...

    java源码包2

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    java源码包3

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    java源码包4

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    内容索引:JAVA源码,媒体网络,飞鸽传书 Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    内容索引:JAVA源码,媒体网络,飞鸽传书 Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有...

    JAVA上百实例源码以及开源项目

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    JAVA上百实例源码以及开源项目源代码

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

Global site tag (gtag.js) - Google Analytics