UDP协议传输是不需要建立连接的,因为发送端是将需要发送的数据先进行打包处理,然后再将这个包发送的指定的IP地址的指定端口上面!其中主要需要用到的两个对象是DatapramSocket、DatapramPacket!
DatapramSocket对象是在两个主机上建立Socket服务,然后再进行数据的的传送,在进行数据传送的时候需要先将数据用DatapramPacket对象将数据先打包然后再发出。这就是UDP传送的好处:不需要建立连接,只管往你的目的地(IP地址)发送就可以了,并且速度很快!但是不好之处就是:如果对方没有没有及时收到的话那么就会造成数据的丢失,所以像网络下载这种任务如果采用的是UDP协议传送的话肯定是行不通的,但是像一些聊天工具是可以采用的!
下面有一段向某IP地址发送一段文字的代码,便于理解UDP传输:
package net.udp;
//该程序作为发送端
/* 需求:
* 通过UDP的方式将一段文字发送出去。
*
* 思路与步骤:
* 1.要创建一个udpSocket(即创建一个DatagtamSocket对象) 端点,
* 因为只有这个对象能够将你需要发送的数据与底层的端口相连接以便发出。
* 2.提供数据,也就是你需要发送的数据并且将数据用DatagramPacket对象封装。
* 3.利用DatagramSocket对象的send()方法将需要发送的数据发送出去。
* 4.关闭资源
* */
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class udpSendDemo {
public static void main(String[] args)throws Exception{
//创建udp服务
DatagramSocket ds = new DatagramSocket();
//确定数据并且封装成数据包
byte[] buf = "Hello UDP".getBytes();
DatagramPacket dp = new DatagramPacket(buf,buf.length,
InetAddress.getByName("211.69.239.85"),10000);
//通过DatagramSocket对象的send()方法发送出去
ds.send(dp);
//关闭资源
ds.close();
}
}
package net.udp;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
//作为UDP接收端
/* 需求:
* 建立一个程序用于接受UDP协议传输的数据信息并处理。
* 思路:
* 1.创建UDPStocket
* 2.定义一个数据包,因为要存储接收到的字节数据,
* 数据包对象中有许多功能提取字节数据的不同的信息
* 3.使用DatagramSocket对象的receive()方法
* 4.关闭资源
* */
public class udpReceDemo {
public static void main(String[] args)throws Exception{
//创建UDPSocket,建立端点
DatagramSocket ds = new DatagramSocket();
// 创建一个数据包用于接收数据
byte[] buf = new byte[1024];
DatagramPacket dp = new DatagramPacket(buf,buf.length);
//通过ds的receive()方法将收到的数据存入数据包中
ds.receive(dp);
//通过数据包的方法获取其中的数据
String ip = dp.getAddress().getHostAddress();
String data = new String(dp.getData(),0,dp.getLength());
int port = dp.getPort();
System.out.println();
//关闭资源
ds.close();
}
}