Module  java.base
软件包  java.nio.channels

Class DatagramChannel

    • 构造方法详细信息

      • DatagramChannel

        protected DatagramChannel​(SelectorProvider provider)
        初始化此类的新实例。
        参数
        provider - 创建此频道的提供商
    • 方法详细信息

      • open

        public static DatagramChannel open​()
                                    throws IOException
        打开数据报通道。

        新通道是通过调用系统范围默认的SelectorProvider对象的openDatagramChannel方法创建的。 通道不会连接。

        通道插座的ProtocolFamily是平台(可能是配置)依赖,因此未指定。 open允许在打开数据报通道时选择协议族,并且应该用于打开用于Internet协议组播的数据报通道。

        结果
        一个新的数据报通道
        异常
        IOException - 如果发生I / O错误
      • socket

        public abstract DatagramSocket socket​()
        检索与此通道相关联的数据报套接字。

        返回的对象不会声明任何未在DatagramSocket类中声明的公共方法。

        结果
        与此通道相关联的数据报套接字
      • isConnected

        public abstract boolean isConnected​()
        告诉这个通道的插座是否连接。
        结果
        true如果,且仅当此通道的插座是 open并连接
      • connect

        public abstract DatagramChannel connect​(SocketAddress remote)
                                         throws IOException
        连接此通道的插座。

        通道的套接字被配置为仅从给定的远程对等地址接收数据报,并发送数据报。 一旦连接,数据报可能不会被接收或发送到任何其他地址。 数据报套接字保持连接,直到它被明确地断开或直到它被关闭。

        该方法执行与DatagramSocket类的connect方法完全相同的安全检查。 也就是说,如果已经安装了安全管理器,则该方法验证其270560369231283checkConnect方法是否允许分别从给定的远程地址接收数据报并将其发送给给定的远程地址。

        可以随时调用此方法。 它在对被调用的时刻已经进行的读取或写入操作不会有任何影响。 如果此通道的套接字未绑定,则此方法将首先使套接字绑定到自动分配的地址,就像调用参数为nullbind方法null

        参数
        remote - 要连接该通道的远程地址
        结果
        这个数据报通道
        异常
        ClosedChannelException - 如果此通道关闭
        AsynchronousCloseException - 如果另一个线程在连接操作进行过程中关闭此通道
        ClosedByInterruptException - 如果另一个线程在连接操作进行过程中中断当前线程,从而关闭通道并设置当前线程的中断状态
        SecurityException - 如果已安装安全管理器,并且不允许访问指定的远程地址
        IOException - 如果发生其他I / O错误
      • disconnect

        public abstract DatagramChannel disconnect​()
                                            throws IOException
        断开此通道的插座。

        通道的套接字被配置为使得它可以从任何远程地址接收数据报,并发送数据报,只要安全管理器(如果已安装)就允许它。

        可以随时调用此方法。 它在对被调用的时刻已经进行的读取或写入操作不会有任何影响。

        如果此通道的插座未连接,或者通道关闭,则调用此方法不起作用。

        结果
        这个数据报通道
        异常
        IOException - 如果发生其他I / O错误
      • getRemoteAddress

        public abstract SocketAddress getRemoteAddress​()
                                                throws IOException
        返回此通道的插座所连接的远程地址。
        结果
        远程地址; null如果通道的插座未连接
        异常
        ClosedChannelException - 如果通道关闭
        IOException - 如果发生I / O错误
        从以下版本开始:
        1.7
      • receive

        public abstract SocketAddress receive​(ByteBuffer dst)
                                       throws IOException
        通过该频道接收数据报。

        如果数据报可以立即可用,或者如果此通道处于阻塞模式,并且最终变为可用,则将数据报复制到给定的字节缓冲区中,并返回其源地址。 如果此通道处于非阻塞模式,并且数据报不能立即可用,则此方法立即返回null

        数据报从当前位置开始传输到给定的字节缓冲区,就像通常的read操作一样。 如果缓冲区中剩余的字节比保存数据报所需的字节少,则数据报的其余部分将被静默地丢弃。

        该方法执行与DatagramSocket类的receive方法完全相同的安全检查。 也就是说,如果套接字没有连接到特定的远程地址,并且已经安装了安全管理器,那么对于接收到的每个数据报,此方法验证安全管理器的checkAccept方法是否允许源的地址和端口号。 首先通过connect方法连接插座可以避免此安全检查的开销。

        可以随时调用此方法。 但是,如果另一个线程已经在该通道上启动了读取操作,那么此方法的调用将阻塞,直到第一个操作完成。 如果此通道的套接字未绑定,则此方法将首先使套接字绑定到自动分配的地址,就像调用参数为nullbind方法null

        参数
        dst - 要传输数据报的缓冲区
        结果
        数据报的源地址,或 null如果此通道处于非阻塞模式,并且没有数据报立即可用
        异常
        ClosedChannelException - 如果此通道关闭
        AsynchronousCloseException - 如果另一个线程在读取操作正在进行时关闭此通道
        ClosedByInterruptException - 如果另一个线程在读取操作正在进行中断当前线程,从而关闭通道并设置当前线程的中断状态
        SecurityException - 如果已安装安全管理器,并且不允许从数据报发件人接受数据报
        IOException - 如果发生其他I / O错误
      • send

        public abstract int send​(ByteBuffer src,
                                 SocketAddress target)
                          throws IOException
        通过此频道发送数据报。

        如果该通道处于非阻塞模式,并且底层输出缓冲区中有足够的空间,或者如果该通道处于阻塞模式并且充足的空间变得可用,则给定缓冲区中的剩余字节作为单个数据报传输到给定目标地址。

        数据报从字节缓冲区传输,就像通过常规的write操作一样。

        该方法执行与DatagramSocket类的send方法完全相同的安全检查。 也就是说,如果套接字未连接到特定的远程地址,并且已安装安全管理器,则对于发送的每个数据报,此方法验证安全管理器的checkConnect方法允许目标地址和端口号。 首先通过connect方法连接插座可以避免此安全检查的开销。

        可以随时调用此方法。 但是,如果另一个线程已经在该通道上启动了写入操作,那么此方法的调用将阻塞,直到第一个操作完成。 如果此通道的套接字未绑定,则此方法将首先使套接字绑定到自动分配的地址,如同通过调用参数为nullbind方法null

        参数
        src - 包含要发送的数据报的缓冲区
        target - 要发送数据报的地址
        结果
        发送的字节数,这是调用此方法时在源缓冲区中剩余的字节数,或者如果此通道不阻塞,则可能为零,如果底层中的数据报的空间不足输出缓冲区
        异常
        ClosedChannelException - 如果此通道关闭
        AsynchronousCloseException - 如果另一个线程在读取操作正在进行时关闭此通道
        ClosedByInterruptException - 如果另一个线程在读取操作正在进行中断当前线程,从而关闭通道并设置当前线程的中断状态
        SecurityException - 如果已安装安全管理器,并且不允许将数据报发送到给定地址
        IOException - 如果发生其他I / O错误
      • read

        public abstract int read​(ByteBuffer dst)
                          throws IOException
        从此频道读取数据报。

        此方法只能在该通道的套接字连接时被调用,并且只接受套接字对等体的数据报。 如果数据报中存在比保留在给定缓冲区中更多的字节,则数据报的其余部分将被静默地丢弃。 否则,此方法的行为与ReadableByteChannel界面中的规定完全相同。

        Specified by:
        read在接口 ReadableByteChannel
        参数
        dst - 要传输字节的缓冲区
        结果
        读取的字节数,可能为零,如果通道已达到流出端, -1
        异常
        NotYetConnectedException - 如果此通道的插座未连接
        ClosedChannelException - 如果此通道关闭
        AsynchronousCloseException - 如果另一个线程在读取操作正在进行时关闭此通道
        ClosedByInterruptException - 如果另一个线程在读取操作正在进行中断当前线程,从而关闭通道并设置当前线程的中断状态
        IOException - 如果发生其他I / O错误
      • read

        public abstract long read​(ByteBuffer[] dsts,
                                  int offset,
                                  int length)
                           throws IOException
        从此频道读取数据报。

        此方法只能在该通道的套接字连接时被调用,并且只接受套接字对等体的数据报。 如果数据报中存在比保留在给定缓冲区中更多的字节,则数据报的其余部分将被静默地丢弃。 否则,此方法的行为与ScatteringByteChannel接口中的规定完全相同。

        Specified by:
        read在接口 ScatteringByteChannel
        参数
        dsts - 要传输字节的缓冲区
        offset - 要传输字节的第一个缓冲区的缓冲区中的偏移量; 必须是非负数,不得大于dsts.length
        length - 要访问的缓冲区的最大数量; 必须是非负数,不得大于dsts.length - offset
        结果
        读取的字节数,可能为零,如果通道已达到流出端, -1
        异常
        NotYetConnectedException - 如果此通道的插座未连接
        ClosedChannelException - 如果此通道关闭
        AsynchronousCloseException - 如果另一个线程在读取操作正在进行时关闭此通道
        ClosedByInterruptException - 如果另一个线程在读取操作正在进行中断当前线程,从而关闭通道并设置当前线程的中断状态
        IOException - 如果发生其他I / O错误
      • read

        public final long read​(ByteBuffer[] dsts)
                        throws IOException
        从此频道读取数据报。

        此方法只能在该通道的套接字连接时被调用,并且只接受套接字对等体的数据报。 如果数据报中存在比保留在给定缓冲区中更多的字节,则数据报的其余部分将被静默地丢弃。 否则,此方法的行为与ScatteringByteChannel接口中的规定完全相同。

        Specified by:
        read在接口 ScatteringByteChannel
        参数
        dsts - 要传输字节的缓冲区
        结果
        读取的字节数,可能为零,如果通道已达到流出端, -1
        异常
        NotYetConnectedException - 如果此通道的插座未连接
        ClosedChannelException - 如果此通道关闭
        AsynchronousCloseException - 如果另一个线程在读取操作正在进行时关闭此通道
        ClosedByInterruptException - 如果另一个线程在读取操作正在进行中断当前线程,从而关闭通道并设置当前线程的中断状态
        IOException - 如果发生其他I / O错误
      • write

        public abstract long write​(ByteBuffer[] srcs,
                                   int offset,
                                   int length)
                            throws IOException
        将数据报写入此通道。

        此方法只能在该通道的套接字连接时被调用,在这种情况下,它将数据报直接发送到套接字的对等体。 否则它的行为与GatheringByteChannel接口中的规定完全相同。

        Specified by:
        write在接口 GatheringByteChannel
        参数
        srcs - 要检索字节的缓冲区
        offset - 要从中检索字节的第一个缓冲区的缓冲区数组中的偏移量; 必须是非负数,不得大于srcs.length
        length - 要访问的缓冲区的最大数量; 必须是非负数,不得大于srcs.length - offset
        结果
        发送的字节数,这是调用此方法时在源缓冲区中剩余的字节数,或者如果此通道不阻塞,则可能为零,如果底层中的数据报的空间不足输出缓冲区
        异常
        NotYetConnectedException - 如果此通道的插座未连接
        ClosedChannelException - 如果此通道关闭
        AsynchronousCloseException - 如果另一个线程在写操作正在进行时关闭此通道
        ClosedByInterruptException - 如果另一个线程在写操作正在进行时中断当前线程,从而关闭通道并设置当前线程的中断状态
        IOException - 如果发生其他I / O错误
      • write

        public final long write​(ByteBuffer[] srcs)
                         throws IOException
        将数据报写入此通道。

        此方法只能在该通道的套接字连接时被调用,在这种情况下,它将数据报直接发送到套接字的对等体。 否则它的行为与GatheringByteChannel界面中的规定完全相同。

        Specified by:
        write在接口 GatheringByteChannel
        参数
        srcs - 要检索字节的缓冲区
        结果
        发送的字节数,这是调用此方法时在源缓冲区中剩余的字节数,或者如果此通道不阻塞,则可能为零,如果底层中的数据报的空间不足输出缓冲区
        异常
        NotYetConnectedException - 如果此通道的插座未连接
        ClosedChannelException - 如果此通道关闭
        AsynchronousCloseException - 如果另一个线程在写操作正在进行时关闭此通道
        ClosedByInterruptException - 如果另一个线程在写操作正在进行时中断当前线程,从而关闭通道并设置当前线程的中断状态
        IOException - 如果发生其他I / O错误
      • getLocalAddress

        public abstract SocketAddress getLocalAddress​()
                                               throws IOException
        返回此通道的套接字所绑定的套接字地址。

        通道为Internet协议套接字地址的通道为bound ,则此方法的返回值为InetSocketAddress

        如果有一个安全管理器集,其checkConnect方法将以本地地址和-1作为参数来调用,以查看是否允许该操作。 如果不允许操作,则SocketAddress表示loopback地址的SocketAddress和通道插座的本地端口。

        Specified by:
        getLocalAddress在接口 NetworkChannel
        结果
        SocketAddress表示该套接字绑定,或 SocketAddress表示环回地址,如果安全管理员拒绝,或 null如果该通道的套接字未绑定
        异常
        ClosedChannelException - 如果通道关闭
        IOException - 如果发生I / O错误