概念:
用户数据报传输协议
特点:
传输数据量小(64K),不一定传输成功,没有明确的客户端与服务端的概念,数据不会通过输入输出流传输,而是会通过打包成数据报,,再传输入通道
构造方法:
1.DatagramSocket (端口号) //DatagramSocket 构造方法
2.1 DatagramPacket( 字节数组 ,数组长度) //构造一个空的数据报
2.2 DatagramPacket( 字节数组,数组长度,IP,端口号 ) //将要传输的数据包装成一个数据包
DatagramSocket方法:
socket.receive(packt); //将数据包发送到通道
socket.send(packet); //接收通道的数据包 注意:如果未接收到 程序会停滞
DatagramPacket方法:
packet.getLength(); //获取数据包中字节数组的真实长度
packet.getData(); //从数据包中获取数据,是一个字节数组
UDPReceiver接收端代码:
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.sql.SQLOutput;
/**
* ======刘春春大帅逼======
* ******java学习之旅******
*
* ————————UDP接收端——————
*
*/
public class UDPReceiver {
public static void main(String[] args) throws Exception{
//1.创建一个DatagramSocket对象 , 准备在9999接收数据
DatagramSocket socket = new DatagramSocket(9999);
//2.构建一个DatagramPacket 对象,准备接收数据
byte[] buf = new byte[1024];
DatagramPacket packet = new DatagramPacket(buf,buf.length);
//3.调用接收方法 , 将通过网络传输的 DatagramPacket对象
// 填充到packet对象
socket.receive(packet);
//4.可以把packet 进行拆包,取出数据,并显示
int length= packet.getLength();//获取数据包中字节数组的真实长度
byte[] data = packet.getData();//从数据包中获取数据,是一个字节数组
String s = new String(data,0,length);
System.out.println(s);
socket.close();
}
}
UDPSender发送端:
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.nio.charset.StandardCharsets;
/**
* ======刘春春大帅逼======
* ******java学习之旅******
*
* ------发送端------ 也可以接收数据
*/
public class UDPSender {
public static void main(String[] args) throws Exception{
//创建 DatagramSocket 对象,准备发送和 接收数据(9998)
DatagramSocket socket = new DatagramSocket(9998);
// 将需要发送的数据,封装到 DatagramPacket对象
byte[] data = "hello 明天吃火锅!".getBytes(StandardCharsets.UTF_8);
//说明: 封装的DatagramPacket对象 data内容字节数组,data.length,主机(ip),端口
DatagramPacket packet = new DatagramPacket(data, data.length, InetAddress.getByName("192.168.19.1"), 9999);
socket.send(packet);
socket.close();
}
}
谢谢观看,如有错误,劳烦指出!