Android 网络交互(四) UDP实现及UDP和TCP区别

来源:互联网 发布:java编程规范第四版 编辑:程序博客网 时间:2024/06/02 11:39

这次我们继续网络交互的未完之路。今天给大家带来的是UDP协议,在上一篇博客中我们已经知道UDP是属于传输层的协议,并简单介绍了他和应用层通信之间的关系,下面我们就来更清楚的认识UDP协议。

UDP:User Datagram Protocol,用户数据包协议,是一种不可靠的,无连接的,简单的,基于数据报的通信协议。

无连接:传送数据前,不需要建立连接。

不可靠:无法保证数据是否完全的送达,可靠性依靠上层协议支持。

在传送数据较少、较小的情况下,UDP比TCP更加高效。

我们来看下UDP数据报的结构:


源、目的端口号:占16比特。用来标识源端和目标端的应用进程,与TCP相同。

长度字段:占16比特。包括报头和数据部分在内的总字节数。报头的长度是固定的,主要是数据部分。

校验和:占16比特。用来对UDP头部和UDP数据进行校验。和TCP不同的是,对UDP来说,此字段是可选项,而TCP数据段中的校验和字段是必须有的。

下面我们来看一下,UDP实现代码:

UDP是使用DatagramSocket来实现:

客户端实现过程:

步骤1 调用DatagramSocket()创建一个数据包套接字。

步骤2 调用DatagramPacket(byte[]buf,int offset,int length,InetAddress address,int port),建立要发送的UDP包。

步骤3 调用DatagramSocket类的send()发送UDP包。

步骤4 关闭数据报套接字。

代码实现:

try{

//首先创建一个DatagramSocket对象,随机端口

           DatagramSocket socket = new DatagramSocket();

//创建一个InetAddree

          InetAddress serverAddress = InetAddress.getByName("192.168.xxx.xxx");

          String str = "hello udp";  //这是要传输的数据

          byte data [] = str.getBytes();  //把传输内容分解成字节

          //创建一个DatagramPacket对象,并指定要讲这个数据包发送到网络当中的哪个、

地址,以及端口号

           DatagramPacket packet = new

 DatagramPacket(data,data.length,serverAddress,8000);

           //调用socket对象的send方法,发送数据

           socket.send(packet);

       } catch (Exception e) {

           // TODO Auto-generated catch block

           e.printStackTrace();

       }

socket.close();

}

服务端实现过程:

步骤1 调用DatagramSocket(int port)创建一个数据报套接字,并绑定到指定端口上。

步骤2 调用DatagramPacket(byte[]buf,int length),建立一个字节数组以接收UDP包。

步骤3 调用DatagramSocket类的receive(),接受UDP包。

步骤4 关闭数据报套接字。

代码:

//创建一个DatagramSocket对象,并指定监听的端口号

              DatagramSocket socket = new DatagramSocket(8000);

              byte data [] = new byte[1024];

              //创建一个空的DatagramPacket对象

               DatagramPacket packet = 

new DatagramPacket(data,data.length);

              //使用receive方法接收客户端所发送的数据,

              //如果客户端没有发送数据,该进程就停滞在这里

              socket.receive(packet);

              String result = new String(packet.getData(),packet.getOffset(),packet.getLength());

socket.close();

代码和注释都比较简单,写的也比较清楚了,udp的实现原理相对比较简单。当然精益求精,不同的情况需要不同的处理,让性能更高效,这才是我们开发的终求。

TCP和UDP区别:

TCP是面向连接的(三次握手建立连接),而UDP是无连接的(不保证数据的完整性和可靠性)。

TCP是可靠地(保证数据的完整性和有序性) 而UDP是不可靠的。

TCP是基于流,而UDP是基于数据报,字段不同。

TCP用于大数据传输,UDP传输简单的数据(轻量级)。

TCP速度慢,UDP速度快。

TCP更耗费系统资源,建立连接开销较大。
每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信


0 0
原创粉丝点击