1.发送数据
1.步骤
- 使用DatagramSocket创建发送端Socket服务对象
- .使用DatagramPacket创建数据,将所传递的数据、接收端的IP地址、接收端的端口号进行封装
- 调用send方法发送数据
- 调用close方法释放资源
DatagramSocket是用来发送和接收数据报包的套接字。DatagramPacket代表需要传输的数据包。
2.示例
public static void main(String[] args){
try{
//1.使用DatagramSocket创建发送端Socket服务对象
DatagramSocket datagramSocket = new DatagramSocket();
//2.使用DatagramPacket创建数据,并把数据打包
//2.1 将需要传递的数据变成字节数组,并获取长度
String str = "Hello, this message send by udp. You can call me Sean";
byte[] bys = str.getBytes();
int length = bys.length;
//2.2 获取到接收端的IP地址
InetAddress address = InetAddress.getByName("192.168.1.1");
//2.3获取到接收端的端口号
int port = 10010;
//2.4构造DatagramPacket,组成数据包
DatagramPacket packet = new DatagramPacket(bys, length, address, port);
//3.发送数据包
datagramSocket.send(packet);
//4.释放资源
datagramSocket.close();
}catch (Exception e){
e.printStackTrace();
}
}
因为UDP协议不能保证数据一定会被接收到,所以数据丢失也是正确不报错的。
2.接收数据
1.步骤
- 使用DatagramSocket创建接收端Socket服务对象
- .使用DatagramPacket创建数据包作为接收容器
- 调用方法接收数据
- 调用方法解析数据包
- 调用close方法释放资源
2.示例
public static void main(String[] args){
try{
//1.使用DatagramSocket创建接收端Socket服务对象,并指定端口
DatagramSocket datagramSocket = new DatagramSocket(10010);
//2.使用DatagramPacket创建数据包,用于接收
byte[] bys = new byte[1024];
int length = bys.length;
//2.1构造DatagramPacket,组成数据包
DatagramPacket packet = new DatagramPacket(bys, length);
//3.接收数据包
datagramSocket.receive(packet);
//4.解析数据包
InetAddress address = packet.getAddress();
String ip = address.getHostAddress();
byte[] bytes = packet.getData();
int l = bytes.length;
String s = new String(bytes, 0, l);
String s = new String(bytes);
System.out.println(ip + "********" + s);
//5.释放资源
datagramSocket.close();
}catch (Exception e){
e.printStackTrace();
}
}
注意:
- 收发端口要一致
- 接收端口若正在使用就不能被其他进程使用