UDP通信原理
- 概述
用户数据报协议(User Datagram Protocol)是一种无连接的传输协议,它在通信两端各建立一个Socket对象,用于发送和接收数据。不区分客户端与服务器。
- java提供的基于UDP协议的 Socket 类
DatagramSocket
DatagramSocket 与 DatagramPacket
-
概述
DatagramSocket:数据报套接字;套接字是不同主机间的进程进行双间通信的端点,由一个IP地址和端口号组成。(数据包裹收发站)DatagramPacket:数据报包;数据报包将数据打包成包裹,并贴上地址和门牌号(IP和端口),然后就可以交给socket发送出去了。
-
DatagramSocket
构造方法 描述 DatagramSocket() 构造一个数据报套接字并将其绑定到本地主机上的任何可用端口。 DatagramSocket(int port) 构造一个数据报套接字并将其绑定到本地主机上的指定端口。 常用方法 描述 void send(DatagramPacket p) 从此套接字发送数据报包 void receive(DatagramPacket p) 从此套接字接收数据报包 void close() 关闭此数据报套接字 -
DatagramPacket
构造方法 描述 DatagramPacket(byte[] buf, int length, InetAddress address, int port) 构造一个长度为length的数据包buf并明确指定主机的指定端口号 DatagramPacket(byte[] buf, int length) 构造 DatagramPacket用于接收长度为 length数据包buf 常用方法 描述 InetAddress getAddress() 返回发送这个包的计算机IP地址 int getPort() 返回发送这个包的计算机端口号 SocketAddress getSocketAddress() 返回发送这个包的计算机IP地址和端口 int getLength() 返回要发送的数据的长度或接收的数据的长度 byte[] getData() 返回这个包数据缓冲区 int getOffset() 返回要发送的数据的偏移量或接收数据的偏移量 void set***() 所有的get()方法都有对应的set()方法
发送端 与 接收端
-
发送端
public class SendDemo { public static void main(String[] args) throws IOException { //创建数据包裹收发器,并绑定指定端口 DatagramSocket ds = new DatagramSocket(12344); //创建数据包裹并放入数据 byte[] bs = "hello UDP".getBytes(); DatagramPacket dp = new DatagramPacket(bs, bs.length, InetAddress.getByName("192.168.200.10"), 12345); //发送数据包裹 ds.send(dp); //关闭收发器 ds.close(); } }
-
接收端
public class ReceiveDemo { public static void main(String[] args) throws IOException { //创建数据包裹收发器,并绑定指定端口 DatagramSocket ds = new DatagramSocket(12345); //创建数据包裹用于接收数据 byte[] bs = new byte[1024]; DatagramPacket dp = new DatagramPacket(bs, bs.length); //收数据包裹。程序运行到这里会等待发送包裹过来 ds.receive(dp