手机作为一种通讯终端(MMS),伴随着网络的升级而不断的升级换代。1995年1G问世,手机只能进行基本的语音通讯,1996-1997年2G(GSM,CDMA)及其后的GPRS,EDGE等技术的快速发展,手机开始逐渐增加了数据服务功能。2009年开始,3G在全世界开始大规模布置以及苹果创造性开发新型苹果手机。手机慢慢的变成互联网的终端,从而带动了一个新的时代--移动互联网时代。因此现代手机通常都支持这些常用网络设备,如WIFI,NFC,蓝牙等。 Android是由互联网巨头Google带头开发的,因此对网络功能的支持是必不可少的。Google的应用层采用的是Java语言。所以JAVA支持的网络编程方式Android都支持,同时Google还引入了Apache 的HTTP扩展包。另外,针对WIFI,NFC,分别提供的单独的开发API.
表1展示了Android SDK中的一些与网络有关的API包名 表1. Android SDK 网络包 包 描述 API Level Java.net 提供与联网有关的类,包括流和数据包(datagram)sockets、Internet 协议和常见 HTTP 处理。该包是一个多功能网络资源。有经验的 Java 开发人员可以立即使用这个熟悉的包创建应用程序。 1 java.io 虽然没有提供显式的联网功能,但是仍然非常重要。该包中的类由其他 Java 包中提供的 socket 和连接使用。它们还用于与本地文件(在与网络进行交互时会经常出现)的交互 1 java.nio 包含表示特定数据类型的缓冲区的类。适合用于两个基于 Java 语言的端点之间的通信。 1 org.apache.* 表示许多为 HTTP 通信提供精确控制和功能的包。可以将 Apache 视为流行的开源 Web 服务器。 1 android.net 除核心 java.net.* 类以外,包含额外的网络访问 socket。该包包括 URI 类,后者频繁用于 Android 应用程序开发,而不仅仅是传统的联网方面。 1 android.net.http 包含处理 SSL 证书的类。 1 android.net.wifi 包含在 Android 平台上管理有关 WiFi(802.11 无线 Ethernet)所有方面的类。 1 android.telephony.gsm 包含用于管理和发送 SMS(文本)消息的类。一段时间后,可能会引入额外的包来来为非 GSM 网络提供类似的功能,比如 CDMA 或 android.telephony.cdma 等网络。 1 Android.net.sip 包含Andriod平台上管理有关SIP协议如建立和回应Voip的类 9 Android.nfc 包含所有用来管理近场通信相关的功能类 9
在Android中几种网络编程的方式: (1)针对TCP/IP的Socket、ServerSocket (2)针对UDP的DatagramSocket、DatagramPackage。这里需要注意的是,考虑到Android设备通常是手持终端,IP都是随着上网进行分配的。不是固定的。因此开发也是有一点与普通互联网应用有所差异的。 (3)针对直接URL的HttpURLConnection (4)Google集成了Apache HTTP客户端,可使用HTTP进行网络编程。针对HTTP,Google集成了Appache Http core和httpclient 4版本,因此特别注意Android不支持httpclient 3.x系列,而且目前并不支持Multipart(MIME),需要自行添加httpmime.jar (5)使用Web Service。Android可以通过开源包如jackson去支持Xmlrpc和Jsonrpc,另外也可以用Ksoap2去实现Webservice (6) 直接使用WebView视图组件显示网页。基于WebView 进行开发,Google已经提供了一个基于chrome-lite的Web浏览器,直接就可以进行上网浏览网页。
一、我们先来看第一种,针对TCP/IP Socket、ServerSocket的形式。 TCP/IP是一种协议,是一种面向连接的、可靠的协议。Socket仅仅是对TCP、UDP网络接口的封装,不涉及上层协议。TCP、UDP传输特性不同,分别适用于不同类型的应用层协议,其中TCP有连接,延时较长,能保证服务质量;UDP无连接,需要应用程序进行数据分包、延时短,效率高,数据包可能丢失或到达对端发生顺序混乱。在Socket之上可以实现这些RFC标准的应用层协议,也可以自定义实现私有的应用层协议。
在JAVA编程中, 经常使用java.net和javax.net包来开发socket程序,下面列出所有常用的类,并简单介绍。关于详细的信息请参看JAVA文档。
Java.net Java.net.Socket 客户端连接使用的TCP socket Java.net.DatagramSocket 客户端和服务端共同使用的UDP socket Java.net.ServerSocket 服务端TCP socket监听端口 Java.netInetAddress IP地址封装类 Java.net.DataGramPacket 通过DatagramSocket收发的数据包的封装类,包括数据和对端的IP地址、UDP端口
Javax.net Javax.net.SocketFactory 客户端连接使用的T CP socket Javax.net.ServerSocketFactory 服务端TCP socket监听端口 Javax.net.ssl.SSLSocketFactory SSL客户端Socket构造器 Javax.net.ssl.SSLServerFactory SSL服务端监听Socket构造器
示例代码: android+socket编程实例.rar
二、针对UDP的DatagramSocket、DatagramPackage 1.对于UDP服务端,首先启动侦听服务,然后得到数据包进行处理,组后根据获得数据包进行反馈。 2.UDP socket没有连接的概念,因此构造完成的DatagramSocket不会发出向对端的网络连接请求,在每一个发送的UDP数据包中包含目的地址和端口。因为UDP数据不会在对端进行重新组包,因此一次发送的数据长度必须加以限制。Socket.send(outputPacket);用于发送一个数据包;socket.receive(inputPacket);用于接收一个数据包。
<ignore_js_op style="word-wrap: break-word;">
<ignore_js_op style="word-wrap: break-word;">
示例代码: 服务器端: public class UDPServer{ public static void main(String[] args) throws Exception{ DatagramSocket udpSocket = new DatagramSocket(8000); while(true){ try{ // UDP数据读取 DatagramPacket packet = new DatagramPacket(new byte[512],512); udpSocket.receive(packet); String msg = new String(packet.getData()), 0,packet.getLength()); System.out.println(msg); if(msg.equals("exit")){ break; } // UDP数据发送 SimpleDateFormat f = new SimpleDateFormat("MMM dd,yyyy kk:mm:ss"); String time = "现在的时间是:" + f.format(new Date()); packet.setData(time.getBytes()); udpSocket.send(packet); }catch(Exception e){ e.printStackTrace(); } } udpSocket.close(); } }
客户端: public void client(){ InetAddress remoteIP; try { remoteIP = InetAddress.getByName("localhost"); DatagramSocket socket = new DatagramSocket(); } catch (UnknownHostException e1) { e1.printStackTrace(); } BufferedReader wt = new BufferedReader (new InputStreamReader(System.in)); System.out.println("input one line ,user \"exit\" to quit the server "); while(true){ try{ // 读取输入 String str = wt.readLine(); byte[] outputData = str.getBytes(); // UDP socket 数据发送 DatagramPacket outputPacket = new DatagramPacket(outputData,outputData.length,remoteIP,8000); socket.send(outputPacket); if(str.equals("exit")){ //udp 数据读取 DatagramPacket inputPacket = new DatagramPacket(new byte[512],512); socket.receive(inputPacket); System.out.println(new String(inputPacket.getData(),0,inputPacket.getLength())); } }catch(Exception e){ e.printStackTrace(); } } socket.close(); }
三、针对直接URL的HttpURLConnection 这个就是把请求的方式从HttpClient换成HttpURLConnection就可以了。没什么可以说的,自己看看吧。
示例代码:无
四、Google集成了Apache HTTP客户端,可使用HTTP进行网络编程 这个不多说了,网络编程,必须会的。自己看代码吧。服务端我使用三种方式:S2SH、只用Struts2、Servlet。客户端就一种,只不过换个请求的URL。服务端和客户端交互使用了两种方式:XML、JSON,目前开放平台返回的数据都是支持这两种数据格式的。所以我也实现了这两种数据格式。其实还有一种格式,就是google的protocal buffer,这种形式在国内用的人比较少,我也没弄,感兴趣的同学看我提供的文档,自己研究吧。注意把里面的IP换成自己电脑的IP地址。
示例代码: 服务端:ServletTest1.rar、StrAnd.rar、WebAndroid.rar 客户端:WebAndroidClient.rar
参考网址: http://www.cnblogs.com/zhangdong ... /04/19/2020688.html http://blog.csdn.net/woshisap/article/details/6621571 http://www.360doc.com/content/11/0521/01/4154133_118259561.shtml
注意:在只使用Struts2的服务器端,可以这么配置: <package name="struts-main" extends="json-default" > <action name="*UserAction" class="userAction" method="{1}"> <result type="json"></result> </action> </package> 也可以这么配置: <package name="struts-main" extends="struts-default" > <action name="*UserAction" class="userAction" method="{1}"> <result name="register">/WEB-INF/page/register.jsp</result> <result name="save">/WEB-INF/page/index.jsp</result> </action> </package>
但是其实返回数据的时候都是封装JSON字符串,没用到第一种形式的配置的功能。据说,用第一种配置方式,struts2可以自动把返回的数据封装成JSON字符串的形式,但是我没测试成功。。。。我返现返回什么格式还是什么格式,并没有把数据自动封装成JSON返回。 在使用S2SH的服务端,就不能用第一种方式配置。只能用第二种方式,然后服务端封装JSON返回客户端。如果用第一种方式配置,就会发生404错误。无法找到服务器端。 在使用Servlet的服务端,可以通过下面这种方式设置返回类型,但是其实没用,你设置了,它也不返回。你只能自己封装XML文件或者JSON字符串,然后返回。 response.setContentType("application/json;charset=utf-8");
(5)使用Web Service 我之前只听说过什么事webservice,因此主要是参考下面文章实现的DEMO,他给出了一些实例代码,不全,我给基本补全了。显示天气信息我都在LOG输出了,没有显示在界面上,如果大家觉得不爽,可以把信息直接显示在界面上就可以了。因为我被这个问题困扰了2天,弄的很崩溃,所以就没继续弄。大家自己看吧。 那么什么是webService呢?,它是一种基于SAOP协议的远程调用标准,通过webservice可以将不同操作系统平台,不同语言,不同技术整合到一起。在Android中,第三方公司提供了基于webservice的jar包:ksoap2-android-assembly-2.5.2-jar-with-dependencies.jar http://www.cnblogs.com/zhangdong ... /04/19/2020688.html http://www.cnblogs.com/ghj1976/archive/2011/04/26/2028904.html 示例代码:SoapAndroidTeset.rar、sserEx09.rar
(6) 直接使用WebView视图组件显示网页 这就是使用webview显示网页的问题,比较容易,大家自己看吧。我就不贴实例代码了。 |
|
相关推荐
Android 网络通信的六种方式示例代码.zip项目安卓应用源码下载Android 网络通信的六种方式示例代码.zip项目安卓应用源码下载 1.适合学生毕业设计研究参考 2.适合个人学习研究参考 3.适合公司开发项目技术参考
本示例代码着重讲解了六种不同的网络通信方式,旨在帮助开发者理解并掌握Android网络编程。 1. **HTTPURLConnection** Android API 9及更高版本推荐使用`HttpURLConnection`进行网络通信,因为它更加高效且易于...
Android源码_网络通信的六种方式示例代码.zip
本示例代码着重讲解了六种Android网络通信的方式,旨在帮助开发者更好地理解和实践。下面我们将详细探讨这六种方法。 1. **HttpURLConnection**: HttpURLConnection是Java标准库提供的API,适用于HTTP/HTTPS请求。...
本压缩包包含的"Android 网络通信的六种方式示例代码"将详细展示如何在Android平台上进行网络操作。以下是这六种网络通信方式的详细介绍: 1. **HTTPURLConnection**: HttpURLConnection是Java API的一部分,适用...
本示例代码详细介绍了Android中六种常见的网络通信方式,旨在帮助开发者快速理解和应用这些技术。以下是这六种方式的详细说明: 1. **HttpURLConnection** HttpURLConnection是Java标准库提供的网络通信接口,适用...
网络通信的六种方式示例代码 android socket编程实例 ServletTest1 SoapAndroidTeset sserEx09 StrAnd WebAndroid WebAndroidClient
在提供的"Android 网络通信的六种方式示例代码.zip"源码资源中,你可以找到对应每种方式的具体实现,通过实际运行和调试,加深对它们的理解。这包括了如何设置请求参数、处理响应数据、错误处理等方面,对于学习和...
Android项目源码-网络通信的六种方式示例代码.zip
本示例代码库涵盖了Android进行网络通信的六种常见方式,旨在帮助开发者深入理解和实践。以下是这些方法的详细说明: 1. **HttpURLConnection** HttpURLConnection是Java内置的HTTP客户端,适用于简单的HTTP请求。...
本压缩包文件“安卓Android源码——网络通信的六种方式示例代码”提供了关于Android平台下进行网络通信的多种方法的详细示例,这对于开发者来说是非常宝贵的资源。下面将详细介绍这六种网络通信方式及其应用场景。 ...
本压缩包"Android应用源码之网络通信的六种方式示例代码"提供了一套完整的示例,帮助开发者深入理解和实践Android中的网络通信技术。下面将详细介绍这六种网络通信方式。 1. **HttpURLConnection**:这是Android ...
本资源包含的"安卓Android源码——精典源码之网络通信的六种方式示例代码.zip"是针对Android平台下网络通信实现的详细实践教程。下面我们将深入探讨这六种网络通信方式及其应用场景。 1. **HttpURLConnection**:这...
Android应用源码之网络通信的六种方式示例代码.zip项目安卓应用源码下载Android应用源码之网络通信的六种方式示例代码.zip项目安卓应用源码下载 1.适合学生毕业设计研究参考 2.适合个人学习研究参考 3.适合公司开发...
本资源“Android应用源码之网络通信的六种方式示例代码”提供了丰富的实践案例,适用于毕业设计学习,帮助开发者深入理解Android中的网络编程。以下将详细讲解这六种网络通信方式及其应用。 1. **HttpURLConnection...
本项目提供了一份毕业设计源码,详细展示了Android进行网络通信的六种常见方式。下面将对这些方式进行详细解释。 1. **HttpURLConnection**: HttpURLConnection是Java SDK内置的API,适用于HTTP/HTTPS协议的网络...