UDP协议特点
面向无连接协议(只管发送不管对方是否接收到)
基于数据包传输:将要发送的数据,接收端IP地址,端口号打包到一个数据包中发送
传输数据大小限制在64k以内
速度快,但是不可靠(传输中可能会丢失数据)
与网络编程相关的类
InetAddress类介绍
一个该类的对象就代表一个IP地址
常用静态方法
static InetAddress getLocalHost() 获取自己电脑的ip地址对象 static InteAddress getByName(String host) 根据参数给定的主机名,获取IP地址对象
经用非静态方法
String getHostName(); 获取主机名 String getHostAddress() 获取ip字符串
UDP协议通讯两个相关类
DatagramPacket
数据包对象
作用:用来装要发送或者要接收的数据
常用构造介绍
DatagramPacket(byte[] buf, int length, InetAddress address, int post)
but 要发送的字节数组
length 要发送的字节数组长度
address 接收端的ip地址对象
post 介绍端的端口号
DatagramPacket(byte[] buf, int length)
buf 用来接收发送端发送过来的数据
length 最多可以接收的byte个数,也就是buf数组的长度
DatagramSocket
数据传输对象,用来传输DatagramPacket打包好的数据
构造方法
DatagramSocket() 创建发送端对象,随机给定端口号 DatagramSocket(int port) 创建接收端对象,port为指定的端口号 方法介绍
send(DatagramPacket dp) 发送数据包 receive(DatagramPacket dp) 介绍数据包
UDP协议实现通信
发送端
public static void main(String[] args) throws IOException { //发送端 发送端要发送的数据 byte[] bytes = "美女。吃饭没。。。。".getBytes(); // 创建packet对象存储要发送的数据 要发送的数据 要发送的数据数组长度 接收端口的ip地址对象 接收端的端口号 DatagramPacket pd = new DatagramPacket(bytes,bytes.length, InetAddress.getLocalHost(),5656); //创建发送端对象 DatagramSocket ds = new DatagramSocket(); //发送数据 ds.send(pd); //关闭资源 ds.close(); }
接收端
public static void main(String[] args) throws IOException { //接收端 设置接收端的端口 端口访范围要在0到65535之间,不能与电脑应用端口重复端口 DatagramSocket ds = new DatagramSocket(5656); //创建字节数组保存发送过来的数据 byte[] bytes = new byte[1024]; //创建 数据包对象 用来装数据 DatagramPacket dp = new DatagramPacket(bytes,bytes.length); //接收发送端发送过来的数据 ds.receive(dp); //获取接收到的字节数组长度 int length = dp.getLength(); //获取发送端的ip InetAddress address = dp.getAddress(); //获取发送端的端口 int port = dp.getPort(); //打印接收到的数据 System.out.println(new String(bytes,0,length)); //打印发送端的ip和端口号信息 System.out.println("发送端的ip为:"+address.getHostAddress()); System.out.println("发送端的端口号为:"+port); //关闭资源 ds.close(); }
java网络编程之UDP协议
最新推荐文章于 2022-03-11 18:55:01 发布