1.发送数据
(1)创建DatagramSocket对象
(2)创建数据包,填入参数:字节数组,数组长度,IP地址,端口号
(3)使用DatagramSocket发送数据
(4)关闭DatagramSocket对象
public static void main(String[] args) throws IOException {
//创建发送端
DatagramSocket ds = new DatagramSocket();
byte[] bytes = "Hello World".getBytes();
//创建发送数据包,设置ip地址和端口号
InetAddress ip = InetAddress.getByName("127.0.0.1");
DatagramPacket dp = new DatagramPacket(bytes,bytes.length,ip,12345);
//发送数据包
ds.send(dp);
//关闭发送端
ds.close();
}
2.接收数据
(1)创建接收端,设置接口号,和发送端保持一致
(2)创建空的数据包,用于接收数据
(3)接收数据,放入数据包的缓冲区
(4)解析数据
(5)关闭接收端
public static void main(String[] args) throws IOException {
//创建对象
DatagramSocket ds = new DatagramSocket(12345);
//创建数据包
byte[] bytes = new byte[1024];
DatagramPacket dp = new DatagramPacket(bytes,bytes.length);
//阻塞等待接收数据,填充到dp的缓冲区
ds.receive(dp);
//解析数据
byte[] data = dp.getData();
int length = dp.getLength();
System.out.println(new String(data,0,length));
//关闭接收端
ds.close();
}
3.实现多人聊天
发送端
public static void main(String[] args) throws IOException {
//创建发送端
DatagramSocket ds = new DatagramSocket();
//创建发送数据包,设置ip地址和端口号
InetAddress ip = InetAddress.getByName("127.0.0.1");
Scanner sc = new Scanner(System.in);
while(true) {
String s = sc.nextLine();
byte[] bytes = s.getBytes();
DatagramPacket dp = new DatagramPacket(bytes,bytes.length, ip, 12345);
//发送数据包
ds.send(dp);
if(sc.equals("bye")) break;//当接收到"bye"时,退出循环
}
//关闭发送端
ds.close();
}
接收端
public static void main(String[] args) throws IOException {
//创建对象
DatagramSocket ds = new DatagramSocket(12345);
//创建数据包
byte[] bytes = new byte[1024];
DatagramPacket dp = new DatagramPacket(bytes,bytes.length);
//阻塞等待接收数据,填充到dp的缓冲区
while(true) {
ds.receive(dp);
//解析数据
byte[] data = dp.getData();
int length = dp.getLength();
System.out.println(new String(data, 0, length));
if(dp.equals("bye")) break;
}
//关闭接收端
ds.close();
}
多人聊天实现方式
结果示例:
输入端:
输出端: