# UDP通信程序
UDP通信原理
- UDP协议是一种不可靠的网络协议,在通信两端各建立一个Socket对象,但是这两个Socket对象只是发送,接受数据的对象,因此对于基于UDP协议通信双方而言,没有所谓的客户端,服务端的概念
- Java提供了DatagramSocket类作为基于UDP协议的Socket
UDP发送数据
- 创建发送端的Socket对象(DatagramSocket)
- 创建数据,并打包数据
- 调用DatagramSocket对象方法发送数据
- 关闭发送端
DatagramSocket ds = new DatagramSocket();
byte[] bytes="Hello,udp,俺老孙来也".getBytes();
DatagramPacket dp = new DatagramPacket(bytes, bytes.length,InetAddress.getByName("10.5.219.110"), 10086);
ds.send(dp);
ds.close();
UDP接收数据
- 创建接收端的Socket对象(DatagramSocket)
- 创建一个数据包,用于接收数据
- 调用DatagramSocket方法用于接收数据
- 解析数据包,并把数据在控制台上显示
- 关闭接收端
DatagramSocket ds = new DatagramSocket(10086);
byte[] bytes = new byte[1024];
DatagramPacket dp = new DatagramPacket(bytes,bytes.length);
ds.receive(dp);
System.out.println(new String(dp.getData(),0,dp.getLength()));
ds.close();
UDP通信程序联系小案例
题目需求
- UDP发送数据,数据来源于键盘的输入,直到输入886,发送数据结束
- UDP接收数据,因为接收端不知道发送端什么时候停止发送,故采用死循环
发送端源码
public class InetAddressDemo {
public static void main(String[] args) throws IOException {
DatagramSocket ds = new DatagramSocket();
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
String line;
while ((line=bf.readLine())!=null){
if("886".equals(line)){
break;
}
byte[] bytes = line.getBytes();
DatagramPacket dp = new DatagramPacket(bytes,bytes.length, InetAddress.getByName("10.5.219.110"),12345);
ds.send(dp);
}
ds.close();
}
}
接收端源码
public class ReceiveDemo {
public static void main(String[] args) throws IOException {
DatagramSocket ds = new DatagramSocket(12345);
while (true){
byte[] bytes=new byte[1024];
DatagramPacket dp = new DatagramPacket(bytes,bytes.length);
ds.receive(dp);
System.out.println("接收的数据为 :"+new String(dp.getData(),0,dp.getLength()));
}
}
}