UDP方式的传输

部分内容需要查文档学习,我们需要了解下面的两个类:java.net.DatagramSocket和java.net.DatagramPacket

java.net.DatagramSocket:

此类表示用来发送和接收数据报包的套接字。它就像数据传输过程中的司机或者接站员一样,它指引着数据发送的方向和传输到达的地方

构造方法:

DatagramSocket() 构造数据报套接字并将其绑定到本地主机上任何可用的端口。

DatagramSocket(int port, InetAddress laddr) 创建数据报套接字,将其绑定到指定的本地地址。

常用的方法:

send(DatagramPacket p) 从此套接字发送数据报包。

receive(DatagramPacket p)从此套接字接收数据报包。

close() 关闭此数据报套接字。

java.net.DatagramPacket:

此类表示数据报包。它就像数据传输中的交通工具,就是它承载着数据在主机之间传输,这个对象将数据打了个包,里面不光封装了数据内容,还有数据的来源,发送数据的主机IP端口等等都一并被封装到了里面。

构造方法:

DatagramPacket(byte[] buf, int offset, int length, InetAddress address, int port)
构造数据报包,用来将长度为 length 偏移量为 offset 的包发送到指定主机上的指定端口号。

DatagramPacket(byte[] buf, int length, InetAddress address, int port)
构造数据报包,用来将长度为 length 的包发送到指定主机上的指定端口号。

DatagramPacket(byte[] buf, int length)
构造 DatagramPacket,用来接收长度为 length 的数据包。

UDP接收端

先写一个UDP的接收端,大概思路就是,先通过

DatagramSocket ds = new DatagramSocket(10003);

new一个对象,这个对象用来发送和接收数据包的套接字。然后通过

DatagramPacket dp = new DatagramPacket(buf, buf.length);

定义数据包,最后调用recieve函数来接收数据,并将数据封装在数据包中。
值得注意的是发送端的发送至的IP地址及其端口必须和接收端的主机IP以及端口相对应

import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; public class UdpRecieve { public static void main(String[] args) throws IOException, IOException { System.out.println("udp 接收端......run"); /** * 定义一个udp的接收端,接收发送过来的数据。并显示在屏幕上 * * 思路: * 1、先有udp socket服务,就是先有插座。 而且记住:接收端一定要明确端口,否则,收不到数据 * 2、接受数据。之前应该先将数据存储到数据包中。因为数据还有解析 * 3、先定义数据包 * 4、通过数据包对象获取数据包的内容,发送端的ip、发送端的端口、发送过来的数据 * 5、关闭资源 * */ //1、先有udp socket服务,就是先有插座。而且记住:接收端一定要明确端口,否则,收不到数据 DatagramSocket ds = new DatagramSocket(10000); //2、接受数据。之前应该先将数据存储到数据包中。因为数据还有解析 //3、先定义数据包 byte[] buf = new byte[1024]; //缓冲区,保存数据 DatagramPacket dp = new DatagramPacket(buf, buf.length); ds.receive(dp); //阻塞,在接受到数据之前一直处于阻塞状态,类似于输入操作 //4、通过数据包对象获取数据包的内容,发送端的ip、发送端的端口、发送过来的数据 String ip = dp.getAddress().getHostAddress(); int port = dp.getPort(); String text = new String(dp.getData(),0,dp.getLength()); System.out.println(ip+"---:---"+port+"---:---"+text); //5、关闭资源 ds.close(); } }

将其装在一个while(true)循环里,可以持续接收数据

import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; public class UdpRecieve2 { public static void main(String[] args) throws IOException, IOException { System.out.println("udp 接收端 run"); /** * 定义一个udp的接收端,接收发送过来的数据。并显示在屏幕上 * * 思路: * 1、先有udp socket服务,就是先有插座。 而且记住:接收端一定要明确端口,否则,收不到数据 * 2、接受数据。之前应该先将数据存储到数据包中。因为数据还有解析 * 3、先定义数据包 * 4、通过数据包对象获取数据包的内容,发送端的ip、发送端的端口、发送过来的数据 * 5、关闭资源 * */ //1、先有udp socket服务,就是先有插座嘛。而且记住:接收端一定要明确端口,否则,收不到数据 DatagramSocket ds = new DatagramSocket(10000); while(true) { //2、接受数据。之前应该先将数据存储到数据包中。因为数据还有解析 //3、先定义数据包 byte[] buf = new byte[1024]; DatagramPacket dp = new DatagramPacket(buf, buf.length); ds.receive(dp); //阻塞 //4、通过数据包对象获取数据包的内容,发送端的ip、发送端的端口、发送过来的数据 String ip = dp.getAddress().getHostAddress(); int port = dp.getPort(); String text = new String(dp.getData(),0,dp.getLength()); System.out.println(ip+":"+port+": "+text); } } } UDP发送端

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpgdsz.html