发送端
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.util.Scanner;/*** UDP 通讯协议 局域网通信发送消息 简单实现 发送端** @author silence*/
public class SendDemo {public static void main(String[] args) throws Exception {//此类表示用于发送和接收数据包数据包的套接字//数据包套接字是分组传送服务的发送或接收点。// 在数据包套接字上发送或接收的每个数据包都被单独寻址和路由。// 从一个机器发送到另一个机器的多个分组可以不同地路由,并且可以以任何顺序到达。//在可能的情况下,新构建的DatagramSocket启用了SO_BROADCAST套接字选项,// 以允许传输广播数据包。 为了接收广播数据包,DatagramSocket应该绑定到通配符地址。// 在一些实现中,当DatagramSocket绑定到更具体的地址时,也可以接收广播分组。//示例: DatagramSocket s = new DatagramSocket(null);// s.bind(new InetSocketAddress(8888));// 其中相当于: DatagramSocket s = new DatagramSocket(8888);// 这两种情况都将创建一个DatagramSocket能够在UDP端口8888上接收广播。DatagramSocket datagramSocket = new DatagramSocket();InetAddress ip = InetAddress.getByName("127.0.0.1");int port = 1024;Scanner scanner = new Scanner(System.in);while (true) {System.out.println("请输入要发送的数据:");String str = scanner.nextLine();byte[] bytes = str.getBytes();//该类表示数据包包。//数据包包用于实现无连接分组传送服务。 仅基于该数据包中包含的信息,// 每个消息从一台机器路由到另一台机器。// 从一台机器发送到另一台机器的多个分组可能会有不同的路由,// 并且可能以任何顺序到达。 包传送不能保证。DatagramPacket datagramPacket = new DatagramPacket(bytes, bytes.length, ip, port);datagramSocket.send(datagramPacket);//如果发送的是886就结束发送端if ("886".equals(str)) {break;}}datagramSocket.close();}
}
========服务器端
import java.net.DatagramPacket;
import java.net.DatagramSocket;/*** UDP 通讯协议 接收端** @author silence*/
public class ReceiveDemo {public static void main(String[] args) throws Exception {//此类表示用于发送和接收数据包数据包的套接字//数据包套接字是分组传送服务的发送或接收点。// 在数据包套接字上发送或接收的每个数据包都被单独寻址和路由。// 从一个机器发送到另一个机器的多个分组可以不同地路由,并且可以以任何顺序到达。//在可能的情况下,新构建的DatagramSocket启用了SO_BROADCAST套接字选项,// 以允许传输广播数据包。 为了接收广播数据包,DatagramSocket应该绑定到通配符地址。// 在一些实现中,当DatagramSocket绑定到更具体的地址时,也可以接收广播分组。//示例: DatagramSocket s = new DatagramSocket(null);// s.bind(new InetSocketAddress(8888));// 其中相当于: DatagramSocket s = new DatagramSocket(8888);// 这两种情况都将创建一个DatagramSocket能够在UDP端口8888上接收广播。DatagramSocket datagramSocket = new DatagramSocket(1024);//用于接收的数组byte[] bytes = new byte[1024];//该类表示数据包。//数据包包用于实现无连接分组传送服务。 仅基于该数据包中包含的信息,// 每个消息从一台机器路由到另一台机器。// 从一台机器发送到另一台机器的多个分组可能会有不同的路由,// 并且可能以任何顺序到达。 包传送不能保证。DatagramPacket datagramPacket = new DatagramPacket(bytes, bytes.length);while (true) {//从此套接字接收数据报包。datagramSocket.receive(datagramPacket);int length = datagramPacket.getLength();String str = new String(bytes);System.out.println(str);//如果发送的是886就结束发送端if ("886".equals(str)) {break;}}datagramSocket.close();}
}