发送端
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();
}
}