package network;
import java.io.IOException;
import java.net.*;
import java.nio.charset.StandardCharsets;
/**
* UDP协议实现通信
* UDP协议是一种不可靠的网络协议,它在两端各建立一个Socketd对象,但是两个Socker只是发送数据和接收数据,
* 因此对于基于UDP协议的通信双方而言,没有所谓的客户端和服务端的概念
* Java提供了 DatagramSocket 类作为基于UDP协议的Socket实现功能
*/
public class UdpDemo {
public static void main(String[] args) {
}
/**
* UDP发送数据步骤:
* 1、创建发送端的Socket对象(DatagramSocket)
* 2、创建数据,并把数据打包
* 3、调用DatagramSocket对象的方法发送数据
* 4、关闭发送端
* @throws IOException
*/
public static void send() throws IOException {
//创建发送对象
DatagramSocket datagramSocket = new DatagramSocket();//"192.168.3.14"
//创建数据,并打包数据
//DatagramPacket(byte[] buf, int length, InetAddress address, int port) 构造一个数据包,发送长度为 length的数据包到指定主机上的指定端口号。
byte[] bytes = "你好455454".getBytes(StandardCharsets.UTF_8);//发送数据
InetAddress address = InetAddress.getByName("192.168.3.14");//发送IP
int port = 10086;//端口
DatagramPacket dp = new DatagramPacket(bytes, bytes.length,address,port);
//调用发送方法 send(DatagramPacket p)
datagramSocket.send(dp);
//关闭资源
datagramSocket.close();
}
/**
* UPD接收数据:
* 1、创建接收端的Socket对象(DatagramSocket)
* 2、创建一个数据包,用于接收数据
* 3、调用DatagramSocket对象方法接收数据
* 4、解析数据包、并把数据在控制台显示
* 5、关闭接收端
* @throws IOException
*/
public static void receive() throws IOException {
//创建接收对象
int port = 10086; //指定端口
DatagramSocket datagramSocket = new DatagramSocket(port);
//创建数据包,接收数据
byte[] bytes = new byte[1024];
//调用DatagramSocket对象方法接收数据
DatagramPacket dp = new DatagramPacket(bytes, bytes.length);
datagramSocket.receive(dp);
//解析数据
byte[] data = dp.getData();
int len = dp.getLength();
String s = new String(data,0,len);//将数据转换成String
System.out.println(s);
//关闭
//datagramSocket.close();
}
}