1、需求分析
- UDP发送数据:数据来自于键盘录入,直到输入的数据是886,发送数据结束
- UDP接收数据:因为接收端不知道发送端什么时候停止发送,故采用死循环接收
2、代码实现
发送端
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
public class Send {
public static void main(String[] args) throws IOException {
//创建发送端Socket对象
DatagramSocket ds = new DatagramSocket();
//封装键盘录入
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line;
while ((line = br.readLine()) != null) {
if ("886".equals(line)) {
break;
}
//创建数据,并把数据打包
byte[] bys = line.getBytes();
DatagramPacket dp = new DatagramPacket(bys, bys.length, InetAddress.getByName("10.18.40.120"), 12345);
//发送数据
ds.send(dp);
}
//关闭发送端
ds.close();
}
}
接收端
import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
public class Receive {
public static void main(String[] args) throws IOException {
//创建接收端Socket对象
DatagramSocket ds = new DatagramSocket(12345);
while (true) {
//创建数据包,用于接收数据
byte[] datas = new byte[1024];
DatagramPacket dp = new DatagramPacket(datas, datas.length);
//接收数据
ds.receive(dp);
//解析数据包
System.out.println("数据是:" + new String(dp.getData(), 0, dp.getLength()));
}
//因为一直接收数据,所以不需要关闭接收端
}
}
上述代码如果打开多个发送端,可以实现聊天室功能