CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Java >  J2ME

大家帮帮忙!关于J2ME网络编程的。看看问题在那里??

楼主paulzhang(午夜晚风)2003-12-01 18:35:11 在 Java / J2ME 提问

我大致照着人家的例子做了一个简单的手机HTTP通讯的小程序。如下:  
  这是手机端的程序:  
  import   javax.microedition.midlet.*;  
  import   javax.microedition.lcdui.*;  
  import   javax.microedition.io.*;  
  import   java.io.*;  
  public   class   ClientApp   extends   MIDlet   implements   CommandListener  
  {  
  Display   display;     TextField   tf1,tf2;     String   tf1Str,tf2Str;  
  Form   inputForm,returnForm;  
  Command   cmdSend,cmdBack;  
  final   static   String   defaultURL   =   "http://localhost:8080/examples/servlet/ServletApp";  
  public   ClientApp()  
  {  
  display   =   Display.getDisplay(this);  
  tf1   =   new   TextField("input   first   param:","卢东方",20,TextField.ANY);  
  tf2   =   new   TextField("input   second   param:","王桃群",20,TextField.ANY);  
  cmdSend   =   new   Command("Send",Command.SCREEN,1);  
  cmdBack   =   new   Command("Back",Command.SCREEN,1);  
  inputForm   =   new   Form("pls   input   the   param:");  
  inputForm.append(tf1);   inputForm.append(tf2);  
  inputForm.addCommand(cmdSend);  
  inputForm.setCommandListener(this);  
  }  
  public   void   startApp()   throws   MIDletStateChangeException  
  {  
  display.setCurrent(inputForm);  
  }  
  public   void   invokeServlet(String   url)   throws   IOException  
  {  
  HttpConnection   hc   =   null;   DataOutputStream   dos   =   null;  
  DataInputStream   dis   =   null;  
  try{  
  hc   =   (HttpConnection)Connector.open(url,Connector.READ_WRITE);  
  //设置请求属性  
  hc.setRequestMethod(HttpConnection.POST);  
    //设置为POST请求方式,默认的请求方式是GET  
  hc.setRequestProperty("IF-Modified-Since","15   Oct   2003   08:47:14   GMT");  
  hc.setRequestProperty("User-Agent","Profile/MIDP-1.0   Configuration/CLDC-1.0");  
  hc.setRequestProperty("Content-Language","en-CA");  
  hc.setRequestProperty("Content-Type","application/x-www-form-urlencoded");  
  hc.setRequestProperty("Connection","Keep-Alive");  
  //Connection头可以控制MIDlet和Web服务器之间保持"keep   alive"特色。  
  //"keep   alive"特色是指在MIDlet和Web服务器间始终使用同一个HTTP连接来多次传递数据  
  //(在通常情况下,HTTP是无连接的协议,每次数据传输完毕后都将断开连接,  
  //而下次传递数据之前将重新建立连接)  
  //发送请求参数到servlet  
  dos   =   hc.openDataOutputStream();  
  dos.writeUTF(tf1Str);   dos.writeUTF(tf2Str);  
  //用于发送请求参数给servlet  
  System.out.println("手机传递给servlet的第一个参数为:"+   tf1Str);  
  //主要起调试的作用,调试的结果将显示在WTK的控制台中  
  System.out.println("手机传递给servlet的第一个参数为:"+   tf2Str);  
  dos.flush();   dos.close();  
  //接收servlet响应数据  
  dis   =   new   DataInputStream(hc.openInputStream());  
  String   return1Str   =   dis.readUTF();   String   return2Str   =   dis.readUTF();  
  System.out.println("手机接收到servlet端传来的第一个参数为:"   +   return1Str);  
  //主要起调试的作用,调试的结果将显示在WTK的控制台中  
  System.out.println("手机接收到servlet端传来的第二个参数为:"   +   return2Str);  
  returnForm   =   new   Form("返回的结果");  
  returnForm.append(return1Str);   returnForm.append("\n");  
  //将返回的结果append到resultForm中  
  returnForm.append(return2Str);   returnForm.addCommand(cmdBack);  
  returnForm.setCommandListener(this);  
  }finally{  
  if   (dis   !=   null)   {dis.close();}   if   (dos   !=   null)   {dos.close();}  
  if   (hc   !=   null)   {hc.close();}  
  }  
  display.setCurrent(returnForm);  
  }  
  public   void   pauseApp(){}  
  public   void   destroyApp(boolean   unconditional){}  
  public   void   commandAction(Command   c,Displayable   d){  
  if(c   ==   cmdBack){display.setCurrent(inputForm);}  
  if(c   ==   cmdSend){tf1Str   =   tf1.getString();   tf2Str   =   tf2.getString();  
  try{   invokeServlet(defaultURL);  
  }catch(Exception   e){System.out.println(e.getMessage());}  
  }  
  }  
  }  
   
   
   
  然后我又编了一个服务器端的SERVELET,如下:  
  import   java.io.*;  
  import   java.sql.*;  
  import   javax.servlet.*;  
  import   javax.servlet.http.*;  
  public   class   ServletApp   extends   HttpServlet{  
  public   void   doGet(HttpServletRequest   request,HttpServletResponse   response)  
    throws   IOException,ServletException  
  {  
  response.setContentType("text/html;   charset=GBK");  
  //设置响应属性  
  //接收客户端的请求  
  InputStream   is   =   request.getInputStream();  
  DataInputStream   dis   =   new   DataInputStream(is);  
  String   tf1Str   =   dis.readUTF();String   tf2Str   =   dis.readUTF();  
  System.out.println("servlet端接收到手机传来的第一个参数为:"   +   tf1Str);  
  //   主要起调试的作用,调试的结果显示在tomcat的启动DOS窗口中  
  System.out.println("servlet端接收到手机传来的第二个参数为:"   +   tf2Str);  
  //对接收的参数进行处理  
  String   return1Str   =   tf1Str.concat(":早上好!");  
  //在接收到的参数后连接字符串  
  String   return2Str   =   tf2Str.concat(":晚上好!");  
  //发送处理后的参数给手机  
  DataOutputStream   dos   =   new     DataOutputStream(response.getOutputStream());  
  dos.writeUTF(return1Str);dos.writeUTF(return2Str);  
  System.out.println("servlet传递给手机的第一个参数为:"   +   return1Str);  
  System.out.println("servlet传递给手机的第二个参数为:"   +   return2Str);  
  }  
  public   void   doPost(HttpServletRequest   request,HttpServletResponse   response)  
    throws  
    ServletException,IOException{  
  doGet(request,response);  
  }  
  public   void   destroy(){}  
    //清除资源  
  }  
   
   
  我在自己的机器上搭了个TOMCAT环境,是jakarta-tomcat-3.3版本的。  
   
  现在我运行手机端和打开TOMCAT,但是就是出错,达不到要求的结果,我设置了断点,好像是手机端运行到dos.flush();   就出错了,  
  不好意思,搞了好几天,搞不定,老板眼看着要抄我了,急!!大家有空的话看看,告诉我问题可能在哪里??? 问题点数:50、回复次数:3Top

1 楼miaoliujun(傲龙)回复于 2003-12-01 20:15:50 得分 50

你将  
  dos.writeUTF(tf1Str);   dos.writeUTF(tf2Str);  
  //用于发送请求参数给servlet  
  System.out.println("手机传递给servlet的第一个参数为:"+   tf1Str);  
  //主要起调试的作用,调试的结果将显示在WTK的控制台中  
  System.out.println("手机传递给servlet的第一个参数为:"+   tf2Str);  
  dos.flush();   dos.close();  
  改为:  
  ByteArrayOutputStream   bout=new   ByteArrayOutputStream();  
  DataOutputStream   dos   =   new   DataOutputStream(bout);  
  dos.writeUTF(tf1Str);   dos.writeUTF(tf2Str);  
  byte[]   byteresult=bout.toByteArray();  
  OutputStream   os   =   hpc.openOutputStream();  
  hc.setRequestProperty("Content-Length",Integer.toString(byteresult.length));  
  os.write(byteresult);  
  os.close();Top

2 楼ludf(lu)回复于 2003-12-02 09:41:11 得分 0

哈,楼主,你说的那个“人家”就是我!  
   
  http://tech.ccidnet.com/pub/article/c1060_a70028_p1.html    
  这个程序我运行没问题的!Top

3 楼paulzhang(午夜晚风)回复于 2003-12-02 12:06:56 得分 0

那我服务器端的SERVLET应该怎样写阿??Top

相关问题

  • 有关Windows编程,Help Me
  • 那里有delphi编程书籍下载??
  • 那里有windows网络编程下载???
  • 那里有<<编程精粹>> writing solid code
  • 那里有<windows核心编程>下载?
  • 网络编程高手请进,help me?
  • 请问, 那里有openGL 的编程的中文网站
  • 请问那里有代理服务器的编程资料?
  • 请问那里有《JAVA2编程详解》可以下载?
  • 请问那里有关于linux编程方面的源代码?

关键词

  • 控制台
  • 手机
  • wtk
  • 数据
  • 连接
  • servlet
  • tf
  • 参数
  • inputform
  • writeutf

得分解答快速导航

  • 帖主:paulzhang
  • miaoliujun

相关链接

  • CSDN Java频道
  • Java类图书
  • Java类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo