基本流程
- 核心的两个类/对象 DatagramSocket与DategramPacket
- 建立发送端,接收端(没有客户端,服务端的概念)
- 建立数据包
- 调用DategramSocket的发送,接收方法
- 关闭DategramSocket
UDPReceiverA
package com.chedu.udp;
import javax.xml.crypto.Data;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
import java.security.spec.RSAOtherPrimeInfo;
public class UDPReceiverA {
public static void main(String[] args) throws IOException {
// 1. 创建一个 对象,准备在9999端口接收数据
DatagramSocket socket = new DatagramSocket(9999);
// 2. 构建一个DatagramPacket对象,udp每个数据包系统限制在64k内
byte[] bytes = new byte[1024];
DatagramPacket packet = new DatagramPacket(bytes,bytes.length);
// 3. 调用 接收方法 将通过网络传输的 DatagramPacket 对象 填充到packet
// 提示:当有数据包发送到9999端口时,就会接收到数据
// 没有数据发送到9999端口时,就会阻塞
System.out.println("接收端A 等待接收数据");
socket.receive(packet);
// 4. 可以把packet 进行一个拆包,取出数据并显示
int length = packet.getLength();
byte[] data = packet.getData();
String s = new String(data, 0, length);
System.out.println(s);
// 5 将数据封装到 DatagramPacket中
byte[] buf = "接收端A 发送给发送端B的数据".getBytes();
DatagramPacket datagramPacket = new DatagramPacket(
buf,buf.length, InetAddress.getLocalHost(),9998);
socket.send(datagramPacket);
// 关闭资源
socket.close();
System.out.println("接收端运行结束");
}
}
UDPSenderB
package com.chedu.udp;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
public class UDPSenderB {
public static void main(String[] args) throws IOException {
// 1. 创建一个 Data、gramSocket
DatagramSocket datagramSocket = new DatagramSocket(9998);
// 2 将数据封装到 DatagramPacket中
byte[] buf = "发送端B 发送给接收A端数据".getBytes();
DatagramPacket datagramPacket = new DatagramPacket(
buf,buf.length, InetAddress.getLocalHost(),9999);
datagramSocket.send(datagramPacket);
// 3. 构建一个DatagramPacket对象,udp每个数据包系统限制在64k内
byte[] buf2 = new byte[1024 * 2];
DatagramPacket packet = new DatagramPacket(buf2,buf2.length);
// 4. 调用 接收方法 将通过网络传输的 DatagramPacket 对象 填充到packet
// 提示:当有数据包发送到9999端口时,就会接收到数据
// 没有数据发送到9999端口时,就会阻塞
System.out.println("发送端B 等待接收数据");
datagramSocket.receive(packet);
// 5. 可以把packet 进行一个拆包,取出数据并显示
int length = packet.getLength();
byte[] data = packet.getData();
String s = new String(data, 0, length);
System.out.println(s);
datagramSocket.close();
System.out.println("发送端B运行结束");
}
}