DatagramPacket类 ------打包和拆包
DataPatagramSocket--------发送接受
相关方法
//发送(打包)
DatagramPacket(byt【】 buf,int length, InetAddress);
接受【拆包】
DatagramPacket(byte[] buf,int length)
IP地址
InetAddress getAddress();
数据缓存
byte【】 getDate();
数据长度
int getLongth();
发送
DatagramSocket();
接受
DatagramSocket(int port);
相关实例
l UDP完成数据的发送
/*
* 发送端
* 1,创建DatagramPacket对象,封装数据,接收的地址和端口
* 2,创建DatagramSocket对象
* 3,调用DatagramSocket中的send方法,发送数据包
* 4,关闭资源DatagramSocket
*/
publicclass UDPSend {
publicstaticvoid main(String[] args) throws IOException {
//1,创建DatagramSocket对象
DatagramSocket sendSocket = new DatagramSocket();
//2,创建DatagramPacket对象,并封装数据
//public DatagramPacket(byte[] buf, int length, InetAddress address, int port)
//构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。
byte[] buffer = "hello,UDP".getBytes();
DatagramPacket dp = new DatagramPacket(buffer, buffer.length, InetAddress.getByName("192.168.75.58"), 12306);
//3,发送数据
//public void send(DatagramPacket p) 从此套接字发送数据报包
sendSocket.send(dp);
//4,释放流资源
sendSocket.close();
}
}
l UDP完成数据的接收
/*
* UDP接收端
*
* 1,创建DatagramSocket对象,绑定端口号(要和发送端端口号一致)
* 2,创建字节数组,接收发来的数据
* 3,创建数据包对象DatagramPacket
* 4,调用DatagramSocket对象方法receive(DatagramPacket dp)接收数据,数据放在数据包中
* 5,拆包
发送的IP地址
数据包对象DatagramPacket方法getAddress()获取的是发送端的IP地址对象
返回值是InetAddress对象
接收到的字节个数
数据包对象DatagramPacket方法getLength()
发送方的端口号
数据包对象DatagramPacket方法getPort()发送端口
* 6,关闭资源
*/
publicclass UDPReceive {
publicstaticvoid main(String[] args) throws IOException {
//1,创建DatagramSocket对象,并指定端口号
DatagramSocket receiveSocket = new DatagramSocket(12306);
//2,创建DatagramPacket对象, 创建一个空的仓库
byte[] buffer = newbyte[1024];
DatagramPacket dp = new DatagramPacket(buffer, 1024);
//3,接收数据存储到DatagramPacket对象中
receiveSocket.receive(dp);
//4,获取DatagramPacket对象的内容
//谁发来的数据 getAddress()
InetAddress ipAddress = dp.getAddress();
String ip = ipAddress.getHostAddress();//获取到了IP地址
//发来了什么数据 getData()
byte[] data = dp.getData();
//发来了多少数据 getLenth()
intlength = dp.getLength();
//显示收到的数据
String dataStr = new String(data,0,length);
System.out.println("IP地址:"+ip+ "数据是"+ dataStr);
//5,释放流资源
receiveSocket.close();
}
}