Module java.base
Package java.net

Class DatagramSocketImpl

java.lang.Object
java.net.DatagramSocketImpl
所有已实现的接口:
SocketOptions

public abstract class DatagramSocketImpl extends Object implements SocketOptions
抽象数据报和多播套接字实现基类。
自从:
1.1
  • Field Details

    • localPort

      protected int localPort
      本地端口号。
    • fd

      protected FileDescriptor fd
      文件描述符对象。
  • Constructor Details

    • DatagramSocketImpl

      public DatagramSocketImpl()
      供子类调用的构造函数。
  • Method Details

    • create

      protected abstract void create() throws SocketException
      创建数据报套接字。
      抛出:
      SocketException - 如果底层协议中存在错误,例如TCP错误。
    • bind

      protected abstract void bind(int lport, InetAddress laddr) throws SocketException
      将数据报套接字绑定到本地端口和地址。
      参数:
      lport - 本地端口
      laddr - 本地地址
      抛出:
      SocketException - 如果底层协议中存在错误,例如TCP错误。
    • send

      protected abstract void send(DatagramPacket p) throws IOException
      发送数据报包。数据包包含要发送的数据和目标地址。
      参数:
      p - 要发送的数据包。
      抛出:
      IOException - 发送数据报包时发生I/O异常。
      PortUnreachableException - 如果套接字连接到当前无法访问的目的地,则可能会抛出异常。请注意,并不保证会抛出异常。
    • connect

      protected void connect(InetAddress address, int port) throws SocketException
      将数据报套接字连接到远程目的地。这将远程地址与本地套接字关联,以便只能向该目的地发送数据报并从该目的地接收数据报。这可能会被覆盖以调用本地系统连接。

      如果套接字连接到的远程目的地不存在或无法访问,并且如果已为该地址接收到ICMP目的地不可达数据包,则随后的发送或接收调用可能会引发PortUnreachableException。请注意,并不保证会抛出异常。

      实现要求:
      此方法的默认实现会抛出SocketException
      参数:
      address - 要连接的远程InetAddress
      port - 远程端口号
      抛出:
      SocketException - 如果无法将套接字连接到远程目的地
      自从:
      1.4
    • disconnect

      protected void disconnect()
      从其远程目的地断开数据报套接字。
      实现要求:
      此方法的默认实现会抛出UncheckedIOException
      抛出:
      UncheckedIOException - 如果断开连接失败或未提供实现
      自从:
      1.4
    • peek

      protected abstract int peek(InetAddress i) throws IOException
      查看数据包以查看其来源。将指定的InetAddress更新为数据包的来源地址。
      参数:
      i - InetAddress对象
      返回:
      数据包的来源端口号。
      抛出:
      IOException - 如果发生I/O异常
      PortUnreachableException - 如果套接字连接到当前无法访问的目的地,则可能会抛出异常。请注意,并不保证会抛出异常。
    • peekData

      protected abstract int peekData(DatagramPacket p) throws IOException
      查看数据包以查看其来源。数据将被复制到指定的DatagramPacket中。数据将被返回,但不会被消耗,因此随后的peekData/receive操作将看到相同的数据。
      参数:
      p - 接收到的数据包。
      返回:
      数据包的来源端口号。
      抛出:
      IOException - 如果发生I/O异常
      PortUnreachableException - 如果套接字连接到当前无法访问的目的地,则可能会抛出异常。请注意,并不保证会抛出异常。
      自从:
      1.4
    • receive

      protected abstract void receive(DatagramPacket p) throws IOException
      接收数据报包。
      参数:
      p - 接收到的数据包。
      抛出:
      IOException - 接收数据报包时发生I/O异常。
      PortUnreachableException - 如果套接字连接到当前无法访问的目的地,则可能会抛出异常。请注意,并不保证会抛出异常。
    • setTTL

      @Deprecated protected abstract void setTTL(byte ttl) throws IOException
      Deprecated.
      use setTimeToLive instead.
      设置TTL(生存时间)选项。
      参数:
      ttl - 指定TTL值的字节
      抛出:
      IOException - 设置生存时间选项时发生I/O异常。
      参见:
    • getTTL

      @Deprecated protected abstract byte getTTL() throws IOException
      Deprecated.
      use getTimeToLive instead.
      检索TTL(生存时间)选项。
      返回:
      表示TTL值的字节
      抛出:
      IOException - 检索生存时间选项时发生I/O异常
      参见:
    • setTimeToLive

      protected abstract void setTimeToLive(int ttl) throws IOException
      设置TTL(生存时间)选项。
      参数:
      ttl - 指定生存时间值的int
      抛出:
      IOException - 设置生存时间选项时发生I/O异常。
      参见:
    • getTimeToLive

      protected abstract int getTimeToLive() throws IOException
      检索TTL(生存时间)选项。
      返回:
      表示生存时间值的int
      抛出:
      IOException - 检索生存时间选项时发生I/O异常
      参见:
    • join

      protected abstract void join(InetAddress inetaddr) throws IOException
      加入多播组。
      参数:
      inetaddr - 要加入的多播地址。
      抛出:
      IOException - 加入多播组时发生I/O异常。
    • leave

      protected abstract void leave(InetAddress inetaddr) throws IOException
      离开多播组。
      参数:
      inetaddr - 要离开的多播地址。
      抛出:
      IOException - 离开多播组时发生I/O异常。
    • joinGroup

      protected abstract void joinGroup(SocketAddress mcastaddr, NetworkInterface netIf) throws IOException
      加入多播组。
      参数:
      mcastaddr - 要加入的地址。
      netIf - 指定接收多播数据报包的本地接口
      抛出:
      IOException - 加入多播组时发生I/O异常
      自从:
      1.4
    • leaveGroup

      protected abstract void leaveGroup(SocketAddress mcastaddr, NetworkInterface netIf) throws IOException
      离开多播组。
      参数:
      mcastaddr - 要离开的地址。
      netIf - 指定要在其中离开组的本地接口
      抛出:
      IOException - 离开多播组时发生I/O异常
      自从:
      1.4
    • close

      protected abstract void close()
      关闭套接字。
    • getLocalPort

      protected int getLocalPort()
      获取本地端口。
      返回:
      表示本地端口值的int
    • getFileDescriptor

      protected FileDescriptor getFileDescriptor()
      获取数据报套接字文件描述符。
      返回值:
      一个代表数据报套接字文件描述符的FileDescriptor对象
    • setOption

      protected <T> void setOption(SocketOption<T> name, T value) throws IOException
      用于设置套接字选项。
      实现要求:
      此方法的默认实现首先检查给定的套接字选项name不为null,然后抛出UnsupportedOperationException。子类应该用适当的实现重写此方法。
      类型参数:
      T - 套接字选项值的类型
      参数:
      name - 套接字选项
      value - 套接字选项的值。对于某些选项,值为null可能是有效的。
      抛出:
      UnsupportedOperationException - 如果DatagramSocketImpl不支持该选项
      IllegalArgumentException - 如果值对于该选项无效
      IOException - 如果发生I/O错误,或者套接字已关闭
      NullPointerException - 如果name为null
      自版本:
      9
    • getOption

      protected <T> T getOption(SocketOption<T> name) throws IOException
      用于获取套接字选项。
      实现要求:
      此方法的默认实现首先检查给定的套接字选项name不为null,然后抛出UnsupportedOperationException。子类应该用适当的实现重写此方法。
      类型参数:
      T - 套接字选项值的类型
      参数:
      name - 套接字选项
      返回值:
      套接字选项
      抛出:
      UnsupportedOperationException - 如果DatagramSocketImpl不支持该选项
      IOException - 如果发生I/O错误,或者套接字已关闭
      NullPointerException - 如果name为null
      自版本:
      9
    • supportedOptions

      protected Set<SocketOption<?>> supportedOptions()
      返回此实现和此实现的套接字(DatagramSocket或MulticastSocket)支持的SocketOptions集合
      实现要求:
      此方法的默认实现返回一个空集合。子类应该用适当的实现重写此方法。
      返回值:
      一个SocketOptions集合
      自版本:
      9