DatagramSocket是使用UDP协议的Socket,它的作用是接收和发送数据包. DatagramSocket对象的常用构造方法
//创建一个数据包套接字,绑定到本机上任意一个可用的端口
DatagramSocket()
//通过指定的套接字地址来创建一个数据包套接字
DatagramSocket(SocketAddress)
//指定本地的一个端口,以此来创建数据包套接字
DatagramSocket(int)
//创建一个DatagramSocket对象,并绑定到指定的地址和端口上
DatagramSocket(int, InetAddress)
DatagramSocket对象的发送、接收方法
public void send(DatagramPacket p) throws IOException {.....}
public synchronized void receive(DatagramPacket p) throws IOException {....}
DatagramPacket相当于一个被邮寄的包裹,上面写着收货人的地址,包裹里是所要传递的数据。 DatagramPacket对象的常用构造方法
//以一个空数组来创建DatagramPacket对象,该对象的作用是接收DatagramSocket中的数据。相当于一个缓冲池的作用
public DatagramPacket(byte[] buf,int length)
//一个空的数组来创建DatagramPacket对象,其中 int offset 代表偏移量,int length代表长度(也可以说是池子的容量)
public DatagramPacket(byte buf[], int offset, int length) {}
//创建一个用于发送的DatagramPacket对象,指定发送buf数组中从offset开始,总共length个字节。
public DatagramPacket(byte buf[], int offset, int length, InetAddress address, int port) { }
//以一个包含数据的数组来创建DatagramPacket对象,创建该DatagramPacket对象时还指定了IP地址和端口--这就决定了该数据报的目的地。
DatagramPacket(byte[] buf, int length, InetAddress addr, int port)
通信流程
客户端:
1创建客户端 DatagramSocket 类+指定端口
2准备字节数组
3打包 DatagramPacket +服务器地址 以及端口
4发送
5释放资源
服务端:
1创建服务器 DatagramSocket 类+指定端口
2准备接受的容器 字节数组 封装 DatagramPacket
3接收
4释放资源
实例
public class UdpServer {
public static void main(String[] args) throws IOException {
//1、构件服务端 + 端口
DatagramSocket serverSocket = new DatagramSocket(8888);
//2、封装成包 DatagramPacket(byte[] buf,int lenth) 相当于构建接受池
byte[] bytes = new byte[1024];
DatagramPacket datagramPacket = new DatagramPacket(bytes, bytes.length);
//接收客户端发来的数据
serverSocket.receive(datagramPacket);
//获取接收到的数据
byte[] data = datagramPacket.getData();
//获取接收到的数据的长度
int len = datagramPacket.getLength();
//输出相关的信息
System.out.println("收到数据:" + new String(data, 0, len));
//关闭接收流
serverSocket.close();
}
}
public class UdpClient {
public static void main(String[] args) throws IOException {
DatagramSocket datagramSocket = new DatagramSocket();
String msg = "123456";
byte[] bs = msg.getBytes();
DatagramPacket datagramPacket = new DatagramPacket(bs, bs.length, new InetSocketAddress("127.0.0.1", 8888));
datagramSocket.send(datagramPacket);
datagramSocket.close();
}
}
|