UDP与JavaUDP操作

UDP是什么

  • 全称 User Datagram Protocol
  • 一种用户数据报协议,又称用户数据报文协议
  • 是一个简单的面向数据报的传输层协议,正式规范为RFC 768
  • 用户数据协议、非连接协议

UDP为什么不可靠

  • 它一旦把应用程序发给网络层的数据发送出去,就不保留数据备份
  • UDP在IP数据报的头部,仅仅加入了复用和数据校验(字段)
  • 发送端生产数据,接收端从网络中抓取数据
  • 结构简单、无校验、速度快、容易丢包、可广播

UDP能做什么

  • DNS TFTP SNMP
  • 视频、音频、普通无关紧要数据

UDP报文头

  • 两组0-32,一共64为bit
  • 第一组
    • 0-15 Source Port 发送端口号
    • 16-31 Destination Port 接受端口号
  • 第二组
    • 0-15 Length 长度
    • 16-31 Header and Data Checksum 头部和数据校验
  • UDP包最大长度
    • 16位->2字节 存储长度信息
    • 2^16-1 = 64K - 1 = 65536 - 1 = 65535
    • 自身协议占用:32+32位 = 64位 = 8字节
    • 65535 - 8 = 65507 byte

Java UDP API

DatagramSocket

作用

  • 用于接收与发送UDP的类, 负责发送某一个UDP包,或者接受UDP包
  • 不同于TCP,UDP并没有合并到SocketAPI中

API

  • DatagramSocket() 创建简单实例,不指定端口与IP
  • DatagramSocket(int port) 创建监听固定端口的实例
  • DatagramSocket(int port, InetAdderss loaclAddr)创建固定端口指定IP的实例,当本地存在多个IP的情况下
  • receive(DatagramPacket d) 接受
  • send(DatagramPacket d) 发送
  • setSoTimeout(int timeout) 设置超时,毫秒
  • close() 关闭、释放资源

DatagramPacket

作用

  • 用于处理报文
  • 将byte数组、目标地址、目标端口等数据包装成报文或者将报文拆卸成byte数组
  • 是UDP的发送实体,也是接收实体

API

  • DatagramPacket(byte[] buf, int offset, int length, InetAddress address, int port)
    • 前面3个参数指定buf的使用区间
    • 后面2个参数指定目标机器地址与端口
  • DatagramPacket(byte[] buf, int length, SocketAddress address)
    • 前面3个参数指定buf的使用区间
    • SocketAddress相当于InetAddress + Port
  • setData(byte[] buf, int offset, int length)
  • setData(byte[] buf)
  • setLength(int length)
  • setAddress(InetAddress iaddr)
  • setPort(int iport)
  • setSocketAddress(SocketAddress address)
Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×