设为首页收藏本站language 语言切换
查看: 1266|回复: 0
收起左侧

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

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

本版积分规则

QQ|Archiver|手机版|小黑屋|sitemap|鸿鹄论坛 ( 京ICP备14027439号 )  

GMT+8, 2025-4-11 23:20 , Processed in 0.066996 second(s), 24 queries , Redis On.  

  Powered by Discuz!

  © 2001-2025 HH010.COM

快速回复 返回顶部 返回列表