Socket-UDP

1.UDP是什么

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

2.UDP为什么不可靠

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

3.UDP能做什么

  • DNS、TFTP、 SNMP
  • 视频、音频、普通数据(无关紧要数据),用于直播或者有线电视,因为视频和音频较大


    UDP.png

4.UDP包最大长度

  • 如上图所示,Length ==16位 == 2字节,存储长度信息
  • 2^16 - 1 = 64k - 1 = 65536 - 1 = 65535 byte
  • 自身协议占用:32bit + 32bit = 64bit = 8byte
  • 故信息长度为:65535 - 8 = 65507 byte

5.UDP核心API

  • API-DatagramSocket
    (1)用于接收和发送UDP的类
    (2)负责发送某一个UDP包,或者接收UDP包
    (3)不同于TCP,UDP并没有合并到Socket API中
    (4)DatagramSocket(),创建简单实例,不指定端口与IP
    (5)DatagramSocket(int port),创建监听固定端口的实例,即为发送数据包之后,本机的监听端口
    (6)DatagramSocket(int port, InetAddress localAddr)创建固定端口指定IP的实例,用于本机具备有多个IP地址
    (7)receive(DatagramPacket d):接收
    (8)send(DatagramPacket d):发送
    (9)setSoTimeout(int timeout):设置超时,毫秒
  • API-DatagramPacket
    (1)用于处理报文
    (2)将byte数组、目标地址、目标端口等数据包装成报文或者将报文拆卸为byte数组
    (3)是UDP的发送实体,也是接收实体
    (4)DatagramPacket(byte[] buf, int offset, int length, InetAddress address, int port),前3个参数指定buf的使用区间,后面2个参数指定目标机器地址与端口(仅在发送时有效)
    (5)DatagramPacket(byte[] buf, int offset, int length, SocketAddress address),前三个参数指定buf的使用区间,SocketAddress相当于 address + port
    (6)setData(byte[] buf, int offset, int length)
    (7)setData(byte[] buf) 从0开始到buf结束
    (8)setLength(int length)用于单独设置buf可用长度
    (9)getData()、getOffset()、getLength()获取这三个信息
    (10)setAddress(InetAddress iaddr)、setPort(int port)设置目标IP地址和端口(发送时有效
    (11)getAddress()、getPort()
    (12)setSocketAddress(SocketAddress address)注意(SocketAddress == InetAddress + port)
    (13)getSocketAddress()
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容