深入Socket-UDP

本文深入探讨UDP协议,解析其不可靠的原因,介绍核心API如DatagramSocket及其构造方法,详细阐述UDP通信建立步骤,以及单播、广播、组播的概念与应用场景,通过实例解析UDP单播的工作流程。
摘要由CSDN通过智能技术生成
UDP是什么

UDP-User Datagram Protocol,一种用户数据报协议,又称用户数据报文协议,是基于面向报文的协议,而不是面向连接。
实际上,UDP协议只实现了两个功能:

  • 在IP协议的基础上添加了端口
  • 对传输过程中可能产生的数据错误进行了检测,并抛弃已经损坏的数据
为什么UDP不可靠

UDP只负责发送数据,一旦把应用程序发给网络层的数据发送出去,就不保留数据备份。UDP在IP数据报的头部仅仅加入了复用和数据校验字段。UDP不面向连接,发送端生产数据,接收端在网络中抓取数据,发送端与接收端之间不需要连,容易掉包。

UDP核心API

Java通过DatagramPacket类和DatagramSocket类来使用套接字,客户端和服务器端都通过DatagramSocket的send()方法和receiver()方法来发送和接受数据,用DatagramPacket来包装需要发送或者接收的数据。

  • 发送信息时,Java 创建一个包含待发送信息的 DatagramPacket 实例,并将其作为参数传递给DatagramSocket实例的send()方法;
  • 接收信息时,Java 程序首先创建一个 DatagramPacket 实例,该实例预先分配了一些空间,并将接收到的信息存放在该空间中,然后把该实例作为参数传递给 DatagramSocket 实例的 receive()方法

如果该实例用来包装待接收的数据,则不指定数据来源的远程主机和端口,只需指定一个缓存数据的 byte 数组即可(在调用 receive()方法接收到数据后,源地址和端口等信息会自动包含在 DatagramPacket 实例中),而如果该实例用来包装待发送的数据,则要指定要发送到的目的主机和端口

DatagramSocket
  • 用于接收与发送UDP的类
  • 负责发送某一个UDP包,或者接收UDP包
  • 不同TCP,UDP并没有合并到Socket API中
构造方法
//创建简单实例,不指定端口与IP,自动使用空闲的端口
DatagramSocket()
//创建监听端口的实例,这里指定的端口仅仅用来接收数据,而发送数据时并不一定会发送该端口
DatagramSocket(int port)
//创建固定IP与端口的实例
DatagramSocket(int port,InetAddress localAddr)
//发送数据
send(DatagramPacket p)

//接收数据
receive(DatagramPacket p)

//设置超时时间,单位为毫秒
setSoTimeout(int timeout)

//关闭。释放资源
close()
DatagramSocket

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

构造方法
 //前面三个参数指定buf的使用区间
 //后面两个参数指定目标机器地址与端口
 //这里port仅在发送时有效,接收时无效,接收时的port是通过系统完成指定的。
 public DatagramPacket(byte buf[], int offset, int length,
                          InetAddress address, int port) {
   
        setData(buf, offset, length);
        setAddress(address);
        setPort(port);
    }

//SocketAddress=InetAddress+port
public DatagramPacket(byte buf[], int offset, int length, SocketAddress address
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值