`
lixinye0123
  • 浏览: 341076 次
  • 性别: Icon_minigender_1
  • 来自: 温州
社区版块
存档分类
最新评论

实例分析J2ME网络编程的两种方法

    博客分类:
  • Java
阅读更多
  本文描述了在J2me中开发主要使用的网络连接方法,分别详细介绍了使用http和socket两种方法。
  
  HttpConnection
  
  首先我们先来看一个简单的例子吧:
  
  主要用到的java包:
  
  javax.microedition.io.*;
  
  public String requestGET(String URLString,String URL) throws IOException{
  // =====================================
  // URLString是HTTP地址,URL为后面的参数
  // 这里的例子是发送用的用户名和密码到服务器端进行用户验证
  // 比如 String URLString = "http://192.168.0.1:8080/login.jsp";
  // String URL = "?Name="+this.txtName+"&Pass="+this.txtPass
  // =====================================
  
  HttpConnection hpc = null;
  DataInputStream dis = null;
  
  boolean newline = false;
  
  String content = "";
  try{
  // =====================================
  // 建立连接
  // =====================================
  hpc = (HttpConnection)Connector.open(URLString+URL);
  hpc.setRequestMethod(HttpConnection.GET);
  dis =  new DataInputStream(hpc.openInputStream());
  int character;
  // =====================================
  // 读取返回的HTTP内容
  // ====================================
  while((character = dis.read()) != -1){
  if((char)character == '\\'){
  newline = true;
  continue;
  }
  else{
  if((char)character =='n'&& newline){
  content +="\n";
  newline = false;
  }
  else if(newline){
  content +="\\" +(char)character;
  newline = false;
  }
  else{
  content +=(char)character;
  newline = false;
  }
  }
  }
  }
  catch(IOException e){
  System.out.print("ERROR:"+e);
  }
  finally{
  if(hpc != null){
  hpc.close();
  hpc = null;
  }
  if(dis != null){
  dis.close();
  }
  }
  // ====================================
  // 由于内容可能有中文,所以在接受到信息后要对内容进行字符集的转换
  // ====================================
  content = (unicodeTogb2312(content)).trim();
  return content;
  }
  
  public static String unicodeTogb2312(String s){
  if (s==null){ return ""; }
  if (s.equals("")){ return s; }
  try{
  return new String(s.getBytes("ISO8859_1"),"gb2312");
  }
  catch(Exception uee){
  return s;
  }
  }
  
  以上就是一个简单的HTTP连接并且从服务器获取响应信息的例子,应该很简单了吧。客户端就是上面那个样子,服务器端只要配置好IIS,增加一个网页来对客户端的请求做出响应就行了,其实跟一般的网页请求没有多大区别,很简单吧!!
  
  上面的Socket客户端连接程序就应该算是完工了,下面是搭建服务器端对客户端的连接进行响应。建立服务器端程序,只需要有以下代码即可:
  
  SocketConnection
  
  下面还是从实例入手讲一下J2me的Socket编程。
  
  程序首先打开以IP地址为192.168.0.1:6666的Socket连接,如果连接失败则抛出异常,程序结束。如果Socket连接成功,则继续。
  
  
  public boolean SocketConn(String s) throws IOException{
  
  // ==================================
  // s是Socket连接字符串
  // 这里的例子是发送用的用户名和密码到服务器端进行用户验证
  // 比如 String s = "socket://192.168.0.1:6666"
  // ==================================
  
  private StreamConnection conServer;
  private String strServerAddr;
  private boolean bConnected;
  
  conServer = null;
  strServerAddr = s; // 连接地址
  bConnected = false; // 连接状态
  
  try
  {
  conServer = (StreamConnection)Connector.open(strServerAddr);
  }
  catch(Exception exception)
  {
  System.out.println("Connect server error");
  bConnected = false;
  return false;
  }
  bConnected = true;
  System.out.println("connect ok!");
  return true;
  }
  
  
  上面的Socket客户端连接程序就应该算是完工了,下面是搭建服务器端对客户端的连接进行响应。建立服务器端程序,只需要有以下代码即可:
  
  ..........
  try{
  // 建立端口为6666的socket服务器
  ServerSocketConnection SocketSer;
  SocketSer = (ServerSocketConnection)Connector.open("socket://:6666");
  
  // 等待客户端连接
  SocketConnection sc;
  // 如有连接,则新增一个线程对连接进行处理
  sc = (SocketConnection)SocketSer.acceptAndOpen();
  ..........
  while(true){
  // 对sc的InputStream和OutPutStream进行处理
  
  }
  }
  ..........
  
  在这里需要说明一下我的看法,手机通过Socket连接上服务器后,由于我用的是中国移动的号码,所以跑的是GPRS通道,我所建立的服务器连接所获得的客户端IP只是一个虚拟IP,而这个IP估计是以用户当前最近的移动机站的编码通过一些变化而产生的,所以当用户不停的移动的时候,IP也许会发生变化(这里我就不太清楚了),有兴趣的可以去看看“移动虚拟IP技术”相关的报道。本来我以前的想法是用户连接到服务器后只要IP不变就可以实现服务器向客户端广播数据,但是这个IP并非是长连接,服务器在广播数据的时候也许会有很大部分的客户端的IP会出现变化,所以最后还是采用由客户端主动发送信息的形式。感觉有点扯远了,还是回到正题吧。
  
  客户端在建立Socket连接成功后,即可向服务器发送信息,以下是发送信息模块
  
  
  protected boolean sendData(byte abyte0[])//自己替换[]
  {
  System.out.println("send :" + bConnected);
  // 判断连接情况
  if(!bConnected)
  return false;
  OutputStream outputstream = null;
  try
  {
  outputstream = conServer.openOutputStream();
  // 写信息到outputstream中
  outputstream.write(abyte0);
  // 我的理解是强制送出所有已经写了的信息
  outputstream.flush();
  outputstream.close();
  }
  catch(Exception exception)
  {
  System.out.println("Send Data error");
  bConnected = false;
  try
  {
  if(outputstream != null)
  outputstream.close();
  // 调用断开连接的函数
  disconnect();
  }
  catch(Exception exception1) { }
  return false;
  }
  return true;
  }
  
  下面是读取服务器响应的信息,其他的就不一一说了,把outputstream改为inputstream,然后使用inputstream的read方法就可以了。
  
  ..............
  inputstream = conServer.openInputStream();
  ..............

分享到:
评论

相关推荐

    j2me网络编程大全

    本文将详细介绍J2ME中的网络通信技术,特别是HTTP和Socket两种常用方法,并通过具体的示例代码帮助读者更好地理解和应用这些技术。 #### 二、HTTPConnection详解 HTTP (Hypertext Transfer Protocol) 是一种用于从...

    J2ME游戏编程

    **Premier.Press.J2ME.ebook-LiB.chm**可能是关于J2ME游戏编程的电子书,其中可能包含了深入的理论讲解、实例分析和实战技巧。**file_id.diz**通常是一个文件标识文件,包含书的简短介绍。**LiB.nfo**可能包含书籍的...

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

    9. **源代码分析**:随书附带的源代码可以作为实例,通过阅读和分析这些代码,能够加深对 J2ME 游戏开发的理解。 10. **调试技巧**:学习如何使用 J2ME 的模拟器或者实际设备进行调试,找出并修复程序中的错误。 ...

    J2ME教材:J2ME&Gaming中文版

    这个“J2ME&Gaming中文版”教材主要针对的是Java在游戏开发领域的应用,为初学者提供了学习J2ME编程的基础路径。 J2ME的架构由两部分组成:Connected Limited Device Configuration (CLDC) 和 Mobile Information ...

    j2me实例 手机游戏 源文件

    11. **实例分析**:每个章节都配有实际的代码示例,通过分析这些小游戏的源代码,学习如何将理论知识应用到实践中。 12. **游戏逻辑**:讲解游戏规则的编程实现,如游戏规则的定义、得分计算等。 13. **多线程**:...

    J2ME程序设计实例教程源代码

    本教程源代码提供了一种实践性的学习方法,帮助开发者深入理解J2ME编程。 J2ME的核心在于其可移植性,它通过定义不同的配置(Configurations)和 profiles(配置文件)来适应不同类型的设备。主要的配置有Connected...

    JB.rar_j2me

    【JB.rar_j2me】是一个压缩包,其中包含与J2ME(Java 2 Micro Edition)编程相关的示例。J2ME是Java平台的一个子集,专为资源有限的设备,如...通过学习和分析这些文件,开发者可以了解J2ME编程的基本原理和实践技巧。

    一个超简单的J2ME游戏实例

    在这个超简单的J2ME游戏实例中,我们主要关注两个核心文件,它们构成了游戏的基础。 1. **JAVA源码**: J2ME游戏的编写通常使用Java语言,源代码是游戏逻辑的核心。开发者会用到J2ME的MIDP(Mobile Information ...

    J2ME贪吃蛇原程序

    Java 2 Micro Edition (J2ME) 是一种针对小型设备,如移动电话和嵌入式系统的Java平台。它由两部分组成:KVM(K Virtual Machine)和MIDP(Mobile Information Device Profile)。在本教程中,我们将深入探讨一个...

    跳远类J2ME源代码.rar_j2me

    【描述】提到的“跳远体育类J2ME源代码”表明这是一款基于运动游戏的编程实例,特别是模拟真实世界中的跳远运动。它强调了“动作细腻”,这意味着源代码可能包含精心设计的动画和物理模拟,使游戏体验更加逼真。同时...

    J2ME中使用Socket开发联网程序

    通过上述介绍可以看出,在J2ME环境下使用Socket进行网络编程是一种实用且有效的技术手段。开发者可以根据实际需求选择合适的Socket类型(TCP或UDP),并通过合理的代码设计实现稳定的网络通信功能。同时,在开发过程...

    j2me-案例文档.rar

    "j2me-案例文档.rar"这个压缩包很可能是包含了一系列关于J2ME编程的实例和教程。 J2ME架构主要由两部分组成:配置(Configurations)和框架(Profiles)。配置定义了基本的Java虚拟机(JVM)和类库,而框架则进一步...

    《j2me移动设备程序设计》教材中的源码

    这本书的源码提供了丰富的实例,帮助读者深入理解J2ME编程的核心概念。 1. **J2ME架构与环境** J2ME由配置(Configurations)和框架(Profiles)组成。配置定义了基础的Java虚拟机(JVM)和核心库,而框架则添加了...

    j2me 相关学习课件

    **J2ME(Java 2 Micro Edition)是Java平台的...通过以上课件的学习,开发者将能够熟练掌握J2ME编程,从简单的应用程序到复杂的手机游戏和实用工具,都能得心应手。不断实践和深入研究,将使你在J2ME开发领域游刃有余。

    关于j2me方面的里面有几个例子

    这个压缩包文件包含了一些与J2ME相关的学习实例,可以帮助用户深入理解J2ME编程。 标题中的"关于j2me方面的里面有几个例子"指的是该压缩包中可能包含多个J2ME应用的源代码示例。这些例子通常是为了展示特定的编程...

    开灯关灯J2me手机游戏

    总的来说,"开灯关灯J2me手机游戏"不仅是一个娱乐项目,更是一个学习J2ME编程的实例教材,有助于开发者提升在移动平台上开发互动应用的技能。通过分析这个游戏,我们可以了解到J2ME的编程规范、游戏设计原则以及性能...

    基于J2ME仙剑奇侠传

    通过这个项目,初学者可以学习到J2ME编程的基本技巧,包括UI设计、游戏循环、资源管理等。同时,对于熟悉经典游戏“仙剑奇侠传”的人来说,这个项目提供了一个将熟知的故事与现代编程技术结合的实践机会。总的来说,...

    基于Java的实例源码-简单模拟的J2ME潜艇大战源代码.zip

    Java是一种广泛使用的编程语言,尤其在移动应用领域,如J2ME(Java 2 Micro Edition),它被设计用于资源有限的设备,如早期的手机和嵌入式系统。本实例源码是基于Java的J2ME平台开发的一款简单游戏——潜艇大战。...

    Mytest002.rar_Radio j2me

    通过分析和运行这些代码,开发者可以更深入地理解J2ME GUI编程的实践应用。 通过以上知识点的学习和实践,开发者能够有效地构建功能丰富的J2ME应用程序,特别是在创建用户交互界面方面。对于无线电应用或者任何其他...

    Weiqi.rar_J2ME 围棋_weiqi

    1. J2ME编程基础:了解如何在有限的资源环境下编写Java程序,包括使用J2ME的特定API和框架。 2. 用户界面设计:如何在小屏幕设备上创建直观的触摸屏界面,处理用户的触摸输入事件。 3. 游戏逻辑实现:理解围棋的基本...

Global site tag (gtag.js) - Google Analytics