1.UDP通信传输一般用两个类实现:DatagramSocket,DatagramPacket
2.UDP传输的数据可能是无序的,也可能数据会丢失
A端口接收数据
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class UDPReivertA {
//throws IOException 异常抛出
public static void main(String[] args) throws IOException {
//创建DatagramSocket对象 在9999端口接收数据
DatagramSocket socket = new DatagramSocket(9999);
//构建DatagramPacket 准备接收数据
byte[] buf=new byte[1024];
//调用方法 通过网络传输的DatagramPacket 填充到packet
DatagramPacket packet = new DatagramPacket(buf, buf.length);
//当有数据时 9999端口就会接收 如果没有就会阻塞等待
System.out.println("接收端A 等待数据接收");
socket.receive(packet);//阻塞/等待
//如果有数据 packet进行拆包 取出数据 并显示
int length = packet.getLength();//实际接收到的数据长度
byte[] data = packet.getData();//接收到数据赋给data
String s = new String(data,0,length);//转为String
System.out.println(s);//输出显示
//关闭流
socket.close();
System.out.println("A端退出了");
}
}
接收端A 成功接收数据
————————————————————————————
B端口传输数据
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class UDPSenderB {
// throws IOException 异常抛出
public static void main(String[] args) throws IOException {
// 创建DatagramSocket 在9998端口准备接收或传输数据
DatagramSocket socket = new DatagramSocket(9998);
byte[] data = "hello,你好".getBytes();
//把需要发送的数据 封装DatagramPacket的packet
//封装的DatagramPacke对象的data 是字节数组
//获取本机IP地址:dos窗口--> ipconfig/all 得到本机IP:192.168.2.141
DatagramPacket packet = new DatagramPacket(data, data.length,
InetAddress.getByName("192.168.2.141"), 9999);
//发送数据
socket.send(packet);
//关闭流
socket.close();
System.out.println("B端退出了");
}
}