1、UDP概述
UDP(User Datagram Protocol):用户数据报协议,是一种面向无连接的协议,在通信时发送端和接收端不用建立连接。
2、DatagramPacket
DatagramPacket用于封装数据,在接收端和发送端的DatagramPacket方法有所不同,接收端的构造方法只需要接受一个字节数组来存放接收到的数据,而发送端的构造方法不但要接受发送数据要存放的字节数组,还需要指定发送端IP地址和端口号。
接收端构造方法:
DatagramPacket(byte[] buf, int length):构造DatagramPacket,用来接受长度为length的数据包。
发送端构造方法:
DatagramPacket(byte[] buf, int length, InteAddress address, int port):构造数据包,用来将长度为length的包发送到指定主机上的指定端口号。
常用方法:
- InetAddress getAddress():返回某台机器的IP地址,此数据报将要发往该机器或者是从该机器接收到的。
- int getPort():返回某台远程主机的端口号,此数据报将要发往该主机或者是从该主机接受到的。
- getData():返回数据缓冲区。
- int getLength():返回将要发送或接收到的数据的长度。
3、DatagramSocket
DatagramSocket类的常用构造方法:
- DatagramSocket():构造数据报套接字并将其绑定到本地主机上的任何可用的端口。
- DatagramSocket():构造数据报套接字并将其绑定到本地主机上的指定端口。
常用方法:
- void receive(DatagramPacket p):从此套接字接收数据报包。
- void send(DatagramPacket p):从此套接字发送数据报包。
4、UDP网络程序
UDP接收端
1 package udp;
2
3 import java.io.IOException;
4 import java.net.DatagramPacket;
5 import java.net.DatagramSocket;
6 import java.net.InetAddress;
7
8 /**
9 * <p>Description:UDP接收端 </p>
10 * @author Administrator
11 * @date 2018年11月6日下午3:17:01
12 */
13 public class UDPReceive {
14
15 public static void main(String[] args) throws IOException {
16 // 创建DatagramSocket对象,并指定端口号
17 DatagramSocket ds = new DatagramSocket(6000);
18 // 创建一个空仓库
19 byte[] buffer = new byte[1024];
20 // 创建DatagramPacket对象
21 DatagramPacket dp = new DatagramPacket(buffer, 1024);
22 // 接受数据
23 ds.receive(dp);
24 // 获取DatagramPacket对象内容
25 InetAddress ipAddress = dp.getAddress();
26 String ip = ipAddress.getHostAddress();
27 // 解析数据
28 byte[] data = dp.getData();
29 int length = dp.getLength();
30 // 显示接受到的数据
31 String dataStr = new String(data, 0, length);
32 System.out.println("ip地址:" + ip + "数据是:" + dataStr);
33 // 释放资源
34 ds.close();
35 }
36
37 }
UDP发送端
1 package udp;
2
3 import java.io.IOException;
4 import java.net.DatagramPacket;
5 import java.net.DatagramSocket;
6 import java.net.InetAddress;
7
8 /**
9 * <p>Description:UDP发送端 </p>
10 * @author Administrator
11 * @date 2018年11月6日下午3:07:53
12 */
13 public class UDPSend {
14
15 public static void main(String[] args) throws IOException {
16 // 创建DatagramSocket对象
17 DatagramSocket ds = new DatagramSocket();
18 // 构造数据报包,用来将长度为length的包发送到指定主机的指定端口号上
19 byte[] buffer = "hello,UDP".getBytes();
20 // 创建InetAddress对象,封装自己的IP地址
21 InetAddress inet = InetAddress.getByName("127.0.0.1");
22 // 创建DatagramPacket对象
23 DatagramPacket dp = new DatagramPacket(buffer, buffer.length, inet, 6000);
24 // 发送数据
25 ds.send(dp);
26 // 释放资源
27 ds.close();
28 }
29
30 }
来源:https://www.cnblogs.com/alphajuns/p/9915602.html