在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文档。

二、针对UDP的DatagramSocket、DatagramPackage

1.对于UDP服务端,首先启动侦听服务,然后得到数据包进行处理,组后根据获得数据包进行反馈。

2.UDP socket没有连接的概念,因此构造完成的DatagramSocket不会发出向对端的网络连接请求,在每一个发送的UDP数据包中包含目的地址和端口。因为UDP数据不会在对端进行重新组包,因此一次发送的数据长度必须加以限制。

Socket.send(outputPacket);用于发送一个数据包;socket.receive(inputPacket);用于接收一个数据包。

2011-8-30 14:55 上传

下载附件 (26.73 KB)

示例代码: 服务器端:

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,这种形式在国内用的人比较少

/** 检查网络状态 */

  • Context context = listActivity.getApplicationContext();//获取应用上下文
  • ConnectivityManager connectivityManager = (ConnectivityManager) context
  • .getSystemService(Context.CONNECTIVITY_SERVICE);//获取系统的连接服务
  • NetworkInfo activeNetInfo = connectivityManager.getActiveNetworkInfo();//获取网络的连接情况
  • if(activeNetInfo.getType()==ConnectivityManager.TYPE_WIFI){
  • //判断WIFI网
  • }elseif(activeNetInfo.getType()==ConnectivityManager.TYPE_MOBILE) {
  • //判断3G网
  • }

private boolean checkNetworkState() {

ConnectivityManager connManager = (ConnectivityManager) getSystemService(CONNECTIVITY_SERVICE);

if (connManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).isConnected() // wifi

    || connManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).isConnected()) { // gprs

return true;

}

return false;

}

转载于:https://www.cnblogs.com/lyz459/archive/2013/05/07/3065092.html

Android网络通信的六种方式相关推荐

  1. Android网络通信的六种方式示例代码

    表1展示了Android SDK中的一些与网络有关的API包名 表1. Android SDK 网络包 包                      描述                        ...

  2. Android之网络编程之网络通信几种方式实例分享

    这篇文章主要介绍了android 网络编程之网络通信几种方式,有需要的朋友可以参考一下 现在总结了六种方式: (1)针对TCP/IP的Socket.ServerSocket (2)针对UDP的Data ...

  3. android网络通信之SOAP教程实例汇总

    一.实例教程:Android网络通信之 SOAP教程篇: 1.android webservice通信之ksoap http://www.eoeandroid.com/thread-162563-1- ...

  4. Android进程间通信 - 几种方式的对比总结

    文章目录 什么是RPC 什么是IPC 参考 什么是RPC RPC(Remote Procedure Call)即远程过程调用,它是一种通过网络从远程计算机程序上请求服务,在不需要了解底层网络技术的协议 ...

  5. Android中的IPC方式

    Android中的IPC方式 在上一篇,我们探索了IPC的基本知识,序列化,和Binder的基本实现原理 本篇我们来看看Android中的一些具体的跨进程通信的方式 使用Bundle 我们知道,四大组 ...

  6. android不调用系统发送短信,android之两种方式调用短信发送接口

    释放双眼,带上耳机,听听看~! 相信很多程序员在开发程序的时候都会遇到短信调用端口的情况,今天是技术狗小编为大家带来的关于android之两种方式调用短信发送接口,希望对你学习这方面知识有帮助! an ...

  7. Spring中加载xml配置文件的六种方式

    Spring中加载xml配置文件的六种方式 博客分类: Spring&EJB XMLSpringWebBeanBlog  因为目前正在从事一个项目,项目中一个需求就是所有的功能都是插件的形式装 ...

  8. android的数据存储方式有哪几种方式,Android存储数据的5种方式

    第一种:SharedPreferences 1.使用键值对的方式存储数据 2.通常用于:保存用户的偏好设置.选择是否保存密码.记录文档阅读的位置等 3.实现方式(写入): a).获取SharedPre ...

  9. android源码下载方式

    android源码下载方式: 方式一: repo init -u git://android.git.kernel.org/platform/manifest.git repo sync 这是官方提供 ...

最新文章

  1. apache-2.4.x 编译安装方法
  2. Java之new一个对象简单过程
  3. WebMagic写的网络爬虫优秀文章
  4. java.lang.applet_Java Applet RuntimeException:java.lang.NoClassDefFoun...
  5. 红外接收头图片_亿光红外线接收头IRM-56384内部构造原理图
  6. pythonrequest函数怎么编写出来的_python requests包的request()函数中的参数-params和data的区别简介...
  7. 计算机应用基础上机实验报告怎么写,excel实验报告模板
  8. 词向量与词意-Glo Ve
  9. Lenovo UEFI引导U盘 System x Install Windows Server 2016 R2
  10. Cadence基本操作之——SOIC封装
  11. 对话霍金弟子:AI能帮助人类到其他星球进行时空旅行 | AI英雄
  12. 在cmd运行java_用cmd运行java时的问题
  13. Linux常用命令——grep用法
  14. 项目管理中的边边角角 之三
  15. 智能家居无线网络体验进入“低容错率”时代,华为Wi-Fi 6如何破局?
  16. Ubuntu 20.04 阿里云镜像、国内源
  17. org.yaml.snakeyaml.scanner.ScannerException: while scanning for the next token found character ‘@‘
  18. 老吕架构-2021年文章精选
  19. Lync 2010 升级到Lync 2013 之Lync 2010 客户端无法访问的设置!
  20. 中安威士政务云数据安全加固方案之二

热门文章

  1. 老实人一般容易吃亏,但是老实人遇到的机会比别人多一点点!
  2. 计算机程序员能做多久,这个行业有年龄限制吗?
  3. 互联网上,极致才能成功
  4. Merkle Patricia Tree 详解
  5. Linux中变量$#,$@,$0,$1,$2,$*,$$,$?的含义
  6. sql高级语法之窗口函数调用
  7. 用SAX2方式解析XML
  8. 用QXmlStreamWriter写入xml
  9. [leetcode] Max Points on a Line 判断最多有多少个点在同一条直线上
  10. sql server 面试_SQL Server复制面试问题与解答