Android网络编程之UDP通信模型实例
什么是AndroidUDP?
UDP是UserDatagramProtocol的简称,中文名是用户数据包协议,是OSI参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。它是IETFRFC768是UDP的正式规范。在网络中它与TCP协议一样用于处理数据包。在OSI模型中,在第四层-传输层,处于IP协议的上一层。UDP有不提供数据报分组、组装和不能对数据包的排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。UDP用来支持那些需要在计算机之间传输数据的网络应用。包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都需要使用UDP协议。UDP协议从问世至今已经被使用了很多年,虽然其最初的光彩已经被一些类似协议所掩盖,但是即使是在今天,UDP仍然不失为一项非常实用和可行的网络传输层协议。
与所熟知的TCP(传输控制协议)协议一样,UDP协议直接位于IP(网际协议)协议的顶层。根据OSI(开放系统互连)参考模型,UDP和TCP都属于传输层协议。
UDP协议的主要作用是将网络数据流量压缩成数据报的形式。一个典型的数据报就是一个二进制数据的传输单位。每一个数据报的前8个字节用来包含报头信息,剩余字节则用来包含具体的传输数据。
TCP和UDP在android中的使用和在Java里是完全一样的。
服务端:
packagecom.cheerchip.core;
importjava.io.IOException; importjava.net.DatagramPacket; importjava.net.DatagramSocket; importjava.net.SocketException;
importandroid.util.Log;
publicclassUDPServerimplementsRunnable{
privatestaticfinalintPORT=6000;
privatebyte[]msg=newbyte[1024];
privatebooleanlife=true;
publicUDPServer(){ }
/** *@returnthelife */ publicbooleanisLife(){ returnlife; }
/** *@paramlife * thelifetoset */ publicvoidsetLife(booleanlife){ this.life=life; }
@Override publicvoidrun(){ DatagramSocketdSocket=null; DatagramPacketdPacket=newDatagramPacket(msg,msg.length); try{ dSocket=newDatagramSocket(PORT); while(life){ try{ dSocket.receive(dPacket); Log.i("msgseverreceived",newString(dPacket.getData())); }catch(IOExceptione){ e.printStackTrace(); } } }catch(SocketExceptione){ e.printStackTrace(); } } }