UDP是一个传输协议:
特点:传输的效率高,但是不稳定,存在丢包的情况
通常用于不是非常要求专业的传输,比如:微信语音和视频,网络游戏
Java中提供好了这个内容:
发送和接收的数据都使用Socket类:套接字
DatagramSocket
数据打包相关的类:
DatagramPacket
使用UDP的步骤:
- 建立连接:DatagramSocket(int port):指定端口号,方便发送端寻找
- 建立数据包,用于接收数据:DatagramSocket(byte[ ] buf,int langth)
- 调用socket的方法
- 解析数据
- 关闭socket
发送端和接收端都是相对的程序
发送端:
package Test23_Demo.Demo02;/*@create 2020--12--16--11:21*/import java.io.IOException;import java.net.*;/*** 发送端*/public class UDPSend {public static void main(String[] args) {//建立连接try {DatagramSocket ds = new DatagramSocket();//创建数据String s = "I Love Java";//打包byte[] data = s.getBytes();//将字符串转为字节数组int length = data.length;InetAddress address = InetAddress.getByName("localhost");int port = 1235;//必须与接收端的一致DatagramPacket dp = new DatagramPacket(data, length, address , port);//调用方法进行发送ds.send(dp);//关闭连接ds.close();} catch (SocketException | UnknownHostException ignored) {} catch (IOException e) {e.printStackTrace();}}}
接收端:
package Test23_Demo.Demo02;/*@create 2020--12--16--10:55*/import java.io.IOException;import java.net.DatagramPacket;import java.net.DatagramSocket;import java.net.InetAddress;import java.net.SocketException;/*** 当前的服务器用于接收数据*/public class UDPService {public static void main(String[] args) {//建立连接 - java.net.DatagramSocket;try {DatagramSocket ds = new DatagramSocket(1235);//建立数据包,用于接收数据byte[] buf = new byte[1024];DatagramPacket dp = new DatagramPacket(buf, buf.length);//调用socket方法接收数据ds.receive(dp);//解析数据 - 针对的是数据包进行解析 - dpInetAddress sendAddress = dp.getAddress();String sendIP = sendAddress.getHostAddress();int sendPort = dp.getPort();//端口号//获取数据包中的数据byte[] data = dp.getData();int length = dp.getLength();//将字节数组转换成字符串 - String的构造函数String string = new String(data, 0, length);//输出System.out.println("接收到" + sendIP + "的,端口号为" + sendPort + "的数据" + string);ds.close();} catch (IOException ignored) {}}}
