【网络编程】java手写UDP收发数据

416 阅读2分钟

UDP简介

UDP:User Datagram Protocol,中文名称为用户数据报协议。

它为应用程序提供了一种无需建立连接就可以发送封装的 IP 数据包的方法。

UDP的特点是无连接、不可靠、快速传输。

UDP协议与TCP协议一样用于处理数据包,在OSI模型中,两者都位于传输层处于IP协议的上一层。UDP有不提供数据包分组、组装和不能对数据包进行排序的缺点,也就是说,当报文发送之后,是无法得知其是否安全完整到达的。UDP用来支持那些需要在计算机之间传输数据的网络应用。

通常音频、视频和普通数据在传送时使用UDP较多,因为它们即使偶尔丢失一两个数据包,也不会对接收结果产生太大影响。比如我们聊天用的ICQ和QQ就是使用的UDP协议。

UDP如何收发数据

UDP是可靠的网络协议,它在通信协议的两端各建立了一个Socket对象,但这两个指数发送,接收的对象。因此对于基于UDP协议的通信双方而言,没有所谓的客户端和服务器的概念。

Java提供了DatagramSocket类作为基于UDP协议的Socket。

UDP发送数据

UDP发送步骤

1、创建发送端的Socket对象(DatagramSocket);

2、创建数据,并把数据打包;

3、调用DatagramSocket对象的方法发送数据;

4、关闭发送端;

固定输入发送UDP
 public static void main(String[] args) throws IOException {         //创建发送端的Socket对象(DatagramSocket)         DatagramSocket ds = new DatagramSocket(); ​         //创建数据,并把数据打包;         String str = "你好呀,Java,我来啦";         DatagramPacket dp = new DatagramPacket(str.getBytes(),str.getBytes().length,                 InetAddress.getByName("172.16.47.101"),10001); ​         //️调用DatagramSocket对象的方法发送数据;         ds.send(dp);         //关闭发送端;         ds.close();     }
手动输入发送UDP

可以进一步优化,将写死的输入改为手动输入。

 public static void main(String[] args) throws IOException { ​         //创建发送端的Socket对象         DatagramSocket ds = new DatagramSocket();         //键盘录入         BufferedReader br = new BufferedReader(new InputStreamReader(System.in));         String line;         while ((line = br.readLine()) != null){             if ("88".equals(line)){                 break;             } ​             //创建数据,并把对象打包             byte[] bytes = line.getBytes();             DatagramPacket dp = new DatagramPacket(bytes,bytes.length, InetAddress.getByName("172.16.47.101"),12001);             ds.send(dp); ​         }         //关闭数据源         ds.close();     }
代码运行输出结果

UDP接收数据

接收的步骤

1、创建接收端的Socket对象(DatagramSocket);

2、创建一个数据包,用于接收数据;

3、调用DatagramSocket对象的方法接收数据;

4、解析数据包,并把数据文档在控制台显示;

5、关闭接收端;

接收UDP发送的数据
 public static void main(String[] args) throws IOException {         //创建接收端的Socket对象(DatagramSocket);         DatagramSocket ds = new DatagramSocket(12001); ​         //创建一个数据包,用于接收数据;         byte[] bytes = new byte[1024];         DatagramPacket dp = new DatagramPacket(bytes,bytes.length); ​         //调用DatagramSocket对象的方法接收数据;         ds.receive(dp); ​         byte[] datas = dp.getData();         int length = dp.getLength(); ​         String dataStr = new String(datas,0,length);         System.out.println("udp接收到的数据:" +dataStr); ​         ds.close(); ​     }
代码运行输出结果

在这里插入图片描述