- 浏览: 2111939 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
ratlsun:
想请教下uc最新版本在android4.2和4.3版本上是不是 ...
UC浏览器8.3 (for iPhone)设计理念.“無”为而设 -
gly0920sky520123:
很有用哦,谢谢
DOS命令大全(经典收藏) -
chenyu0748:
UC加油,花哥加油~
UC浏览器8.3 (for iPhone)设计理念.“無”为而设 -
cnliuyix:
LZ搞点更有层次的吧,介个一般工程里根本用不到这么简单的。Si ...
Android 设计一个可单选,多选的Demo -
gang4415:
rgz03407@163.com
JSR规范,系统参数测试大全
注意。本文引用http://www.j2medev.com网上一些内容,只是出于文章的连贯性,请见谅
引言
J2ME(Java 2 Micro Edition)是Java 2的一个组成部分,它与J2SE、J2EE并称。J2ME是一种高度优化的Java运行环境,主要针对消费类电子设备的,例如蜂窝电话、可视电话、数字机顶盒和汽车导航系统等等。即J2ME是为消费电子产品和手持设备量身定制的Java专用版本。
J2ME的出现使开发跨平台的消费类电子产品的应用软件成为可能。Java语言的与平台无关的特性移植到小型电子设备上,允许移动无线设备之间共享应用程序。它提供了基于HTTP的高级Internet协议,使移动电话能以Client/Server方式直接访问Internet的全部信息,从而使得不同的Client访问不同的资源。
在将来的无线通信时代中,大量的网络应用程序将被开发出来去满足无线移动通讯的要求,而要充分的发挥无线移动通讯设备的通信能力,J2ME网络编程就变得尤为重要。那么为了高效地进行网络编程,就要利用Java语言的多线程编程机制。
下面我将给出代码来怎么才可以设计一个好的多线程连网。多线程在设计中的地位是很高的,也是比较难设计好的,没经验的人很容易就使程序产生死锁,崩溃等(在下现在还经常这样^_^)
我的例子是基于socket。
1。数据发送线程SenderTask,
package org.wuhua.net;
import java.io.IOException;
import java.io.OutputStream;
/**
* <b>类名:SenderTask.java</b> </br> 编写日期: 2006-7-16 <br/> 程序功能描述�
* 发��命令线程��如果OputStream 出现异常,则断开�有连�<br/> 断开 Demo: <br/> Bug: <br/>
*
* 程序变更日期 �<br/> 变更作� �<br/> 变更说明 �<br/>
*
* @author wuhua </br> <a href="mailto:rrq12345@163.com">rrq12345@163.com</a>
*/
public class SenderTask implements Runnable {
public OutputStream os;
private String message;
private boolean stop = false;
SenderTask(OutputStream os) {
this.os = os;
}
/**
* 发送指令,具体的指令格式,可以按照自己定义的规则。
*
* @param _msg
*/
public synchronized void send(String _msg) {
message = _msg;
notify(); // 执行运行
}
/**
* 执行,监听客户发送指令,如果指令不为null则工作�, 否则暂停工作直到有客户发送指令为�止才工作,
*/
public synchronized void run() {
try {
runImpl();
} catch (Throwable tw) {
tw.printStackTrace();
}
}
private void runImpl() throws IOException {
while (true) {
if (stop)
break;
// If no client to deal, wait until one connects
if (message == null) {
try {
wait();
} catch (Exception e) {
}
}
wirte();
}
}
/**
* 具体发�送指令的实现
*
* @throws IOException
*
*/
private void wirte() throws IOException {
os.write(message.getBytes());
os.flush();
message = null; // 指令为空,等待下一个指�,
}
public synchronized void stop() {
stop = true;
if (os != null) {
try {
os.close();
os = null;
} catch (IOException e) {
e.printStackTrace();
}
}
notify();
}
}
2。IncepterTask。负责接收从数据传送过来的数据,并且根据服务器要求,做自己的工作,代码:
1。Client类,负责打开连接以及管理,接收数据,与发送数据线程。
以上是连接网络的基本框架,如果需要加些功能可以很好的利用这些代码
引言
J2ME(Java 2 Micro Edition)是Java 2的一个组成部分,它与J2SE、J2EE并称。J2ME是一种高度优化的Java运行环境,主要针对消费类电子设备的,例如蜂窝电话、可视电话、数字机顶盒和汽车导航系统等等。即J2ME是为消费电子产品和手持设备量身定制的Java专用版本。
J2ME的出现使开发跨平台的消费类电子产品的应用软件成为可能。Java语言的与平台无关的特性移植到小型电子设备上,允许移动无线设备之间共享应用程序。它提供了基于HTTP的高级Internet协议,使移动电话能以Client/Server方式直接访问Internet的全部信息,从而使得不同的Client访问不同的资源。
在将来的无线通信时代中,大量的网络应用程序将被开发出来去满足无线移动通讯的要求,而要充分的发挥无线移动通讯设备的通信能力,J2ME网络编程就变得尤为重要。那么为了高效地进行网络编程,就要利用Java语言的多线程编程机制。
下面我将给出代码来怎么才可以设计一个好的多线程连网。多线程在设计中的地位是很高的,也是比较难设计好的,没经验的人很容易就使程序产生死锁,崩溃等(在下现在还经常这样^_^)
我的例子是基于socket。
1。数据发送线程SenderTask,
package org.wuhua.net;
import java.io.IOException;
import java.io.OutputStream;
/**
* <b>类名:SenderTask.java</b> </br> 编写日期: 2006-7-16 <br/> 程序功能描述�
* 发��命令线程��如果OputStream 出现异常,则断开�有连�<br/> 断开 Demo: <br/> Bug: <br/>
*
* 程序变更日期 �<br/> 变更作� �<br/> 变更说明 �<br/>
*
* @author wuhua </br> <a href="mailto:rrq12345@163.com">rrq12345@163.com</a>
*/
public class SenderTask implements Runnable {
public OutputStream os;
private String message;
private boolean stop = false;
SenderTask(OutputStream os) {
this.os = os;
}
/**
* 发送指令,具体的指令格式,可以按照自己定义的规则。
*
* @param _msg
*/
public synchronized void send(String _msg) {
message = _msg;
notify(); // 执行运行
}
/**
* 执行,监听客户发送指令,如果指令不为null则工作�, 否则暂停工作直到有客户发送指令为�止才工作,
*/
public synchronized void run() {
try {
runImpl();
} catch (Throwable tw) {
tw.printStackTrace();
}
}
private void runImpl() throws IOException {
while (true) {
if (stop)
break;
// If no client to deal, wait until one connects
if (message == null) {
try {
wait();
} catch (Exception e) {
}
}
wirte();
}
}
/**
* 具体发�送指令的实现
*
* @throws IOException
*
*/
private void wirte() throws IOException {
os.write(message.getBytes());
os.flush();
message = null; // 指令为空,等待下一个指�,
}
public synchronized void stop() {
stop = true;
if (os != null) {
try {
os.close();
os = null;
} catch (IOException e) {
e.printStackTrace();
}
}
notify();
}
}
2。IncepterTask。负责接收从数据传送过来的数据,并且根据服务器要求,做自己的工作,代码:
package org.wuhua.net; import java.io.DataInputStream; import java.io.IOException; import java.io.InputStream; import java.io.DataInputStream; import java.io.IOException; import java.io.InputStream; /** * <b>类名:CheckForm.java</b> </br> 编写日期: 2006-7-18 <br/> * 程序功能描述:检测从服务器上传过来的数据,并判断是否需要弹出窗口显示给用户,并更新相关的信息 <br/> * 此程序的操作网络的核心类,负责网络,跟一些消息��辑处理<br/> Demo: <br/> * * Bug: <br/> * * 程序变更日期 �<br/> 变更作� �<br/> 变更说明 �<br/> * * @author wuhua </br> <a href="mailto:rrq12345@163.com">rrq12345@163.com</a> */ public class IncepterTask implements Runnable { private DataInputStream in; private boolean stop; private byte[] content = null; IncepterTask(InputStream _in) { in = new DataInputStream(_in); } /** * 程序启动后不停的获取数据,并根据数据的类型做相应的工作 */ public synchronized void run() { try{ runImpl(); }catch(Throwable tw){ tw.printStackTrace(); } } private void runImpl() throws IOException { while (true) { if (stop) break; while (true) { readMessage(); if (content == null) continue; executeIncepter( ); } } } //获取数据后的具体工作 private void executeIncepter() { // TODO Auto-generated method stub } /** * 读取数据 * * @throws IOException */ private void readMessage() throws IOException { content = null; int length = 0; int offer = 0; // 如果没数据则阻塞在这�,等啊等啊等啊. length = in.readShort(); if (length < 0) length = length + 65536; content = new byte[length]; while (true) { int i = in.read(content, offer, length - offer); offer += i; if (offer == length) break; } } public synchronized void stop() { stop = true; if(in != null){ try { in.close(); in = null; } catch (IOException e) { e.printStackTrace(); } } notify(); } }
1。Client类,负责打开连接以及管理,接收数据,与发送数据线程。
package org.wuhua.net; import java.io.IOException; import javax.microedition.io.Connector; import javax.microedition.io.SocketConnection; public class Client { static SocketConnection sc; static IncepterTask it; static SenderTask st; static int restart; public static boolean IS_START = false; private Client() { try { sc = (SocketConnection) Connector.open( "socket://127。0。0。1:1232", 3, false); it = new IncepterTask(sc.openInputStream()); new Thread(it).start(); //启动拦截数据线程 st = new SenderTask(sc.openOutputStream()); new Thread(st).start();//启动数据发送线程 IS_START = true; } catch (Exception e) { IS_START = false; } } public static void start(){ new Client(); } public static void stop() { try { if (sc != null) sc.close(); if(it != null) it.stop(); if(st != null) st.stop(); } catch (IOException e) { } sc = null; st = null; it = null; } /** * 发送指令 */ public static void sendDictate(String type) { try { st.send(type); } catch (Exception e) { e.printStackTrace(); } } }
以上是连接网络的基本框架,如果需要加些功能可以很好的利用这些代码
评论
3 楼 wuhua 2006-11-24其实我在发现上面的程序出现了点问题,
就是 length = in.readShort(); 读取长度的时候有问题。
因为我上面的解决方案并不是同样的,
这里读取长度是在服务器发送数据时候指定的,如果不指定长度的话,则会有问题,
希望大家可以找到一个,如果再未知道数据长度的情况下读取数据流,有什么好的办法可以正当的结束。2 楼 cuihz.hibernate 2006-11-23不错,收下先!!
谢谢1 楼 wuhua 2006-10-30一般用socket编程,一般都涉及到交互问题,所以网络断开重连的设计很重要。发表评论
-
汉字点阵字库原理
2011-01-28 10:09 3383一、 汉字编码 1. ... -
如何通过改jad和Manifest把其它手机的java游戏改成N830的
2011-01-25 10:21 1358首先要明确一点,不是所有的游戏都能改的。 <200 ... -
索爱手机IMSI序列号获取
2011-01-20 11:29 1956国际移动用户识别码(I ... -
J2ME数组的复制及连接操作
2010-11-19 10:47 1266public class Arrays { /** ... -
手机 J2ME MIDP 性能测试工具(MIDP BenchMark)
2010-11-19 10:35 1459JavaME Test Suitehttp://www.dog ... -
SocketConnection 参数详细介绍
2010-03-23 11:34 2132请大家看下面的代码: len = is.read(gDat ... -
J2ME使用Socket通过cmwap接入点访问安全HTTPS
2010-03-17 16:36 484这个问题是在我升级J2ME版XHTML浏览器的时候被引入的 ... -
一些很特别的J2ME开源项目(转
2010-03-11 09:43 2356StrutsME 一个轻量级的序列化协议,使J2ME客户端能调 ... -
WMLC 检查charset编码
2009-12-16 15:27 180http://www.iana.org/assignments ... -
Eclipse快捷键
2009-12-01 10:38 1416编辑相关快捷键 Eclipse的编辑功能非常强大,掌 ... -
改善你的J2ME程序界面-使用开源UI库
2009-09-03 16:45 3697J2ME自带UI不是太美观,使用起来也不太方面,为了解决这 ... -
LZW数据压缩算法的原理分析【转】
2009-08-05 19:31 2569转一篇好文章, 原文地址:http://www.cnblog ... -
<a> 标签,target="blank",target="_blank" 的区别。
2009-05-27 13:00 11549在编写html代码的时候。 target="bla ... -
贡献 高效的MIDlet 编程
2009-05-23 15:32 1899从网上找到这本资料。 是E文版的。 大家顺便锻炼下E文 -
How to use pop-up TextBox in Java ME
2009-05-23 13:44 1772Overview One of the Displayabl ... -
How to use freely resizable font in in Java ME
2009-05-23 13:41 1332Contents [hide] 1 Overview 2 ... -
A Simple Ordered Hashtable
2009-05-23 12:08 1554This article illustrates how to ... -
开发NokiaS40系列应用程序初级篇
2009-05-22 18:56 1717本文讲述如何搭建Nokia S40系列手机应用程序的开发环境 ... -
索尼爱立信手机在 J2ME 程序中的字体大小
2009-05-18 16:25 1343之前有朋友问到索尼爱立信手机在 J2me 程序中的字体大小,请 ... -
If-Modified-Since & If-None-Match
2009-05-13 11:01 14548google告诉网站站长:您 ...
相关推荐
在Java Micro Edition (J2ME)中,线程和网络编程是两个至关重要的概念,尤其对于开发移动设备上的应用程序来说。J2ME为资源有限的设备提供了轻量级的Java平台,因此理解和掌握这两个主题是编写高效、响应式以及能够...
J2ME GPRS网络编程的核心在于理解如何在移动设备上构建应用程序,以利用GPRS网络连接互联网并进行数据交换。以下是一些关键知识点: 1. **KJava与MIDP**: J2ME包含两种主要配置,KJava和MIDP(Mobile Information ...
3. **多线程**:由于网络操作通常涉及阻塞I/O,使用多线程可以避免应用程序在等待网络响应时阻塞。 4. **错误处理**:网络连接可能出现各种异常,因此需要编写健壮的错误处理机制。 5. **安全性**:考虑数据加密和...
需要注意的是,由于J2ME环境可能没有多线程支持,所以这个简单的示例是单线程的,如果有多个客户端同时连接,服务器可能无法处理。 接下来是`Client.java`,客户端主要负责向服务器发送数据,并接收服务器的响应。...
总结起来,网络扑克j2ME程序的开发涵盖了网络编程、用户界面设计、多线程管理、数据结构与算法运用、游戏逻辑实现、安全性保障、资源管理以及性能优化等多个方面,体现了j2ME平台在移动游戏开发中的应用潜力。...
Socket编程在J2ME中的应用主要涉及到网络通信的基础知识,特别是Java Micro Edition (J2ME) 平台上的网络编程。J2ME是Java平台的一个子集,主要用于嵌入式设备和移动设备,如手机、PDA等。在这个场景下,Socket编程...
在飞机游戏中,我们可能会用到MIDP(Mobile Information Device Profile)配置,它是J2ME中最常见的手机应用开发平台,提供了用户界面组件、网络连接等功能。同时,CLDC(Connected Limited Device Configuration)...
总结,J2ME手机编程涉及了从基础环境配置到实际编程实践的多个层面,包括虚拟机、应用结构、UI设计、网络通信和数据管理等方面。掌握这些知识点,开发者可以创建出在各种移动设备上运行的应用程序。
【J2ME手机基于服务器的网络象棋游戏源代码】是一种专门为移动设备设计的网络棋类游戏实现,它利用Java 2 Micro Edition (J2ME) 技术,让玩家能够在手机上与其他在线用户对战。J2ME是Java平台的一个轻量级版本,主要...
《J2ME手机游戏开发——探索蓝牙对战与网络编程》 J2ME,全称Java 2 Micro Edition,是Java平台的一个子集,专为嵌入式设备和移动设备设计,尤其在早期的智能手机领域广泛应用。本项目是基于J2ME的手机游戏开发实例...
在 J2ME 中进行 Socket 编程是实现设备间网络通信的基础,允许应用程序通过 TCP/IP 协议发送和接收数据。下面将详细探讨 J2ME 中的 Socket 编程知识点。 1. **Socket 概念**: - Socket 是网络通信中的一个端点,...
- **连接性增强**:支持更多的网络协议,如HTTP和HTTPS,以及SSL/TLS加密,增强了安全性和网络通信能力。 - **XML解析器**:内置XML解析器,便于处理XML数据。 - **Java虚拟机优化**:提升了性能,减少了内存占用。 ...
8. **Chapter 11(ch11):高级主题**:这可能涉及J2ME的更多高级特性,如多线程编程,以提高应用性能,或者如何优化代码以适应资源有限的移动环境。 通过这些章节的源代码,开发者可以深入理解J2ME的各个方面,并...
- MIDlet Suite:一个或多个MIDlets(J2ME应用程序)的集合。 - MIDlet:运行在J2ME设备上的主应用程序类。 - Display:负责显示用户界面的类。 - Form:用于创建表单的组件。 - Item:构成表单的基本元素,如...
- 在J2ME中,多线程是实现并行操作的关键,比如游戏的动画和用户交互可以分别在不同的线程中运行。 7. **性能优化** - 由于J2ME的目标设备通常资源有限,因此代码优化是必要的。例如,避免不必要的对象创建,使用...
本文聚焦于线程池技术在J2ME网络通信中的应用,旨在通过优化多线程管理,提高网络通信效率,同时减少资源消耗。 #### J2ME网络通信中的多线程挑战 在J2ME环境下,网络通信通常需要在独立的线程中执行,以确保主线...
【标题】"j2me五子棋...通过分析这个项目的源代码,开发者可以学习到J2ME环境下的游戏开发、网络编程、多线程处理以及游戏逻辑的设计等多个方面的知识。这对于想要从事移动游戏开发的人来说,是一个宝贵的教育资源。
在J2ME中,Socket编程允许应用程序通过TCP/IP协议进行双向通信,创建可靠的连接,实现数据的发送与接收。本教程由资深讲师郭克华指导,旨在帮助新手快速掌握这一关键技能。 首先,教程会介绍J2ME的基础知识,包括...
- **线程模型**:简化了多线程编程,确保在有限资源下高效运行。 4. **J2ME开发工具** - **KJava编译器**:用于将源代码编译为可执行的字节码。 - **模拟器**:开发者可以在桌面系统上测试应用程序,模拟目标...
压缩包中的"j2me-Examples"可能包含了一些示例代码,这些代码可以帮助初学者更好地理解和应用上述知识点,通过分析和修改这些示例,可以快速上手J2ME游戏开发。 总的来说,J2ME手机游戏编程是一门既具有挑战性又...