需求:
UDP发送端:数据来自于键盘录入,直到输入的数据是886,发送数据结束
UDP接收端:因为接收端不知道发送端什么时候停止发送,故采用死循环接收
实现:
SendDemo.java
package com.yang.scoket.udp;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
/**
* @author WangYang
* @version 1.0
* @create 2020-02-15 11:28
* <p>
* UDP 发送数据
* 数据来自于键盘录入,直到输入的数据是886,发送数据结束
*/
public class SendDemo {
public static void main(String[] args) throws IOException {
//创建发送端的socket对象
DatagramSocket socket = new DatagramSocket();
//读入键盘录入的数据
BufferedReader bis = new BufferedReader(new InputStreamReader(System.in));
String line;
while ((line = bis.readLine()) != null) {
//创建数据,并把数据打包
byte[] by = line.getBytes();
InetAddress address = InetAddress.getByName("localhost");
DatagramPacket dp = new DatagramPacket(by, by.length, address, 10086);
//发送数据
socket.send(dp);
if ("886".equals(line)) {//如果输入的数据是886,结束发送端
break;
}
}
//关闭发送端
socket.close();
}
}
ReceiveDemo.java
package com.yang.scoket.udp;
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
/**
* @author WangYang
* @version 1.0
* @create 2020-02-15 11:43
*
* UDP接收数据:
* 因为接收端不知道发送端什么时候停止发送,故采用死循环接收
*/
public class ReceiveDemo {
public static void main(String[] args) throws IOException {
//创建接收端的Socket对象(DatagramSocket)
DatagramSocket receive = new DatagramSocket(10086);
while (true){
//创建一个数据包,用于接收数据
byte[] by = new byte[1024];
DatagramPacket dp = new DatagramPacket(by,by.length);
//调用DatagramSocket对象的方法接收数据
receive.receive(dp);
//解析数据包,并把数据在控制台显示
System.out.println("接收的数据是:" + new String(dp.getData(),0,dp.getLength()));
}
//死循环接收,不需要关闭接收端
//receive.close();
}
}
结果: