UDP:信息的发送与接收
UDP
UDP是无连接通信协议,即在数据传输时,数据的发送端和接收端不建立逻辑连接。简单来说,当一台计算机向另外一台计算机发送数据时,发送端不会确认接收端是否存在,就会发出数据,同样接收端在收到数据时,也不会向发送端反馈是否收到数据。
由于使用UDP协议消耗资源小,通信效率高,所以通常都会用于音频、视频和普通数据的传输例如视频会议都使用UDP协议,因为这种情况即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响但是在使用UDP协议传送数据时,由于UDP的面向无连接性,不能保证数据的完整性,因此在传输重要数据时不建议使用UDP协议。UDP在传输时,会将数据进行分包处理,每一个包的大小不超过64k。
DatagramSocket 和 DatagramPacket 两个类是 基于UDP 协议进行通信的包装类
例子?
发送端代码
public class TestSender {
public static void main(String[] args) throws IOException {
// 创建发送端
DatagramSocket client = new DatagramSocket();
// 准备数据
String string = "摩西摩西,晓雯小可爱在吗";
// 打包发送
// 参数1:数据的字节数组
// 参数2:数据的字节数组长度
// 参数3:接收端IP
// 参数4:接收端口号
DatagramPacket pacekt = new DatagramPacket(string.getBytes(), string.getBytes().length, InetAddress.getLocalHost(), 8989);
// 发送数据包
client.send(pacekt);
// 关流
client.close();
}
}
接收端代码
public class TestReceiver {
public static void main(String[] args) throws IOException {
// 基于DUP协议
// 创建接收端+端口号
DatagramSocket server = new DatagramSocket(8989);
// 创建接收容器
byte[] bs = new byte[1024];
// 封装成包
DatagramPacket packet = new DatagramPacket(bs, bs.length);
// 接受信息
server.receive(packet);
// 获取信息实际长度
System.out.println(packet.getLength());
// 获取信息内容
System.out.println(new String(packet.getData(), 0, packet.getLength()));
// 获取IP
System.out.println(packet.getAddress());
// 获取端口号
System.out.println(packet.getPort());
// 关流
server.close();
}
}
