一、UDP协议全称是用户数据报协议 ,在网络中它与TCP协议一样用于处理数据包,是一种无连接的协议。

1、UDP是一个无连接协议,传输数据之前源端和终端不建立连接;

2、不维护连接状态,包括收发状态等,因此一台服务机可同时向多个客户机传输相同的消息;

3、UDP信息包的标题很短,8个字节,对于TCP的20个字节信息包的额外开销很小;

4、吞吐量不受拥挤控制算法的调节,只受应用软件生成数据的速率、传输带宽、源端和终端主机性能的限制;

5、不保证可靠交付;

6、UDP是面向报文的。

二、UDP的代码编程需要用到DatagramSocket类,Java使用DatagramSocket代表UDP协议的Socket,先了解一下如何使用这个类。

server服务端(接收数据方)创建步骤

 1、生成DatagramSocket对象,参数为端口号

2、byte数组用来接收数据

3、DatagramPackage以包形式装载byte数组

4、使用DatagramPacket的receive方法接收发送方所发送的数据,是一个阻塞的方法

5、接收到的数据转变化成可读字符串

 client客户端(发送数据方)创建步骤

1、生成DatagramSocket对象,参数为端口号

2、创建一个InetAddress对象,用于确定server客户端(数据接收方),参数为IP地址,如我的IP地址为192.168.1.103

3、需要发送的数据转化为byte数组

4、生成一个DatagramPacket对象,包含需要发送的byte数组,byte数组长度,已设置IP地址的serverAddress,和服务端一致的端口号(这里是8888)

5、发送数据,调用DatagramSocket对象的send方法

三、代码demo演示

server服务端,可以直接运行在eclipse即可

若多次运行会提示错误:Address already in use: Cannot bind,关掉之前开启的即可。

Android客户端代码demo演示,需要注意的是端口号是与服务端一致的,IP地址是服务端的IP地址。

在AndroidManifest.xml添加权限和注册

这样即可跑起demo做测试了。先运行服务端,再点击发送4次,服务端的log如下:

 Android UDP-LMLPHP

参考博客:

http://www.cnblogs.com/lee0oo0/archive/2012/04/04/2431907.html

http://wang09si.blog.163.com/blog/static/170171804201303004343304/

分类: android

05-24 10:29