模块  jdk.jdi

Class TransportService


  • public abstract class TransportService
    extends Object
    用于调试器和目标VM之间连接的传输服务。

    传输服务是此类的具体子类,它具有零参数构造函数并实现下面指定的抽象方法。 它是Transport用于调试器和目标VM之间连接的基础服务。

    传输服务用于在调试器和目标VM之间建立连接,并通过底层通信协议传输Java调试线协议(JDWP)数据包。 实质上,传输服务实现将JDWP(如JDWP specification中所指定)绑定到底层通信协议。 传输服务实现提供可靠的JDWP分组传输服务。 JDWP数据包发送到目标VM或从目标VM发送,而不会发生重复或数据丢失。 传输服务实现可以基于可靠或不可靠的底层通信协议。 如果底层通信协议是可靠的,则传输服务实现可以相对简单并且可能仅需要将JDWP分组作为底层通信协议的有效载荷来传输。 在不可靠的通信协议的情况下,传输服务实现可以包括附加的协议支持,以便确保分组不被复制并且没有数据丢失。 这些协议的细节特定于实现,但可能涉及诸如在诸如传输控制协议(TCP)的协议中使用的重传技术的肯定确认之类的技术(参见RFC 793 )。

    传输服务可用于启动与目标VM的连接。 这是通过调用attach(java.lang.String, long, long)方法完成的。 或者,传输服务可以侦听和接受目标VM发起的连接。 这是通过调用startListening(String)方法将传输置于侦听模式来完成的。 然后, accept(com.sun.jdi.connect.spi.TransportService.ListenKey, long, long)方法用于接受目标VM发起的连接。

    从以下版本开始:
    1.5
    • 构造方法详细信息

      • TransportService

        public TransportService()
    • 方法详细信息

      • name

        public abstract String name()
        返回用于标识传输服务的名称。
        结果
        运输服务的名称
      • description

        public abstract String description()
        返回传输服务的描述。
        结果
        运输服务的描述
      • attach

        public abstract Connection attach​(String address,
                                          long attachTimeout,
                                          long handshakeTimeout)
                                   throws IOException
        附加到指定的地址。

        附加到指定地址并将表示双向通信信道的连接返回到目标VM。

        附加到目标VM涉及两个步骤:首先,建立到指定地址的连接。 然后进行握手以确保连接到目标VM。 握手涉及交换字符串JDWP-Handshake,Java Debug Wire Protocol规范中所规定。

        参数
        address - 目标VM的地址。
        attachTimeout - 如果此传输服务支持附加超时,并且如果attachTimeout为正,则它指定在连接到目标VM时要使用的超时(以毫秒(或多或少)为单位)。 如果传输服务不支持附加超时,或者如果将attachTimeout指定为零,则在没有任何超时的情况下附加。
        handshakeTimeout - 如果此传输服务支持握手超时,并且如果handshakeTimeout为正,则它指定在与目标VM握手时使用的超时(以毫秒(更多或更少)为单位)。 超时的确切用法特定于传输服务。 例如,传输服务可以在等待来自目标VM的JDWP握手消息时使用握手超时作为字符间超时。 或者,传输服务可以例如使用handshakeTimeout作为握手交换持续时间的超时。 如果传输服务不支持握手超时,或者如果将handshakeTimeout指定为零,则如果没有来自目标VM的响应,则握手不会超时。
        结果
        Connection表示到目标VM的双向通信信道。
        异常
        TransportTimeoutException - 如果在建立连接时发生超时。
        IOException - 如果发生I / O错误(包括握手时超时)。
        IllegalArgumentException - 如果地址无效或附加超时或握手超时的值为负。
        另请参见:
        TransportService.Capabilities.supportsAttachTimeout()
      • startListening

        public abstract TransportService.ListenKey startListening​(String address)
                                                           throws IOException
        侦听入站连接的指定地址。

        此方法启动侦听指定地址的传输服务,以便随后可以接受入站连接。 它不会等到建立入站连接。

        参数
        address - 开始侦听连接的地址,或 null侦听传输服务选择的地址。
        结果
        在后续调用中使用的listen键是 acceptstopListening方法。
        异常
        IOException - 如果发生I / O错误。
        IllegalArgumentException - 如果特定地址无效
      • stopListening

        public abstract void stopListening​(TransportService.ListenKey listenKey)
                                    throws IOException
        停止侦听入站连接。

        accept中使用相同的listen键阻止另一个线程时调用此方法,等待接受连接将导致该线程抛出IOException。 如果在accept中阻塞的线程已经接受了来自目标VM的连接,并且正在与目标VM进行握手,则调用此方法将不会导致该线程抛出异常。

        参数
        listenKey - 从先前调用 startListening(String)startListening()获得的侦听密钥。
        异常
        IllegalArgumentException - 如果listen键无效
        IOException - 如果发生I / O错误。
      • accept

        public abstract Connection accept​(TransportService.ListenKey listenKey,
                                          long acceptTimeout,
                                          long handshakeTimeout)
                                   throws IOException
        接受来自目标VM的连接。

        等待(无限期或超时)以接受来自目标VM的连接。 返回表示到目标VM的双向通信通道的连接。

        接受来自目标VM的连接涉及两个步骤。 首先,传输服务等待接受来自目标VM的连接。 一旦建立连接,就执行握手以确保连接确实是到目标VM。 握手涉及交换字符串JDWP-Handshake,Java Debug Wire Protocol规范中所规定。

        参数
        listenKey - 从先前调用 startListening(String)startListening()获得的侦听密钥。
        acceptTimeout - 如果此传输服务支持接受超时,并且如果acceptTimeout为正,则在等待目标VM连接时阻止最多acceptTimeout毫秒,或多或少。 如果传输服务不支持接受超时或acceptTimeout为零,则无限期阻止目标VM进行连接。
        handshakeTimeout - 如果此传输服务支持握手超时,并且如果handshakeTimeout为正,则它指定在与目标VM握手时使用的超时(以毫秒(更多或更少)为单位)。 超时的确切用法特定于传输服务。 例如,传输服务可以在等待来自目标VM的JDWP握手消息时使用握手超时作为字符间超时。 或者,传输服务可以例如使用超时作为握手交换持续时间的超时。 如果传输服务不支持握手超时,如果将handshakeTimeout指定为零,则如果没有来自目标VM的响应,则握手不会超时。
        结果
        Connection表示到目标VM的双向通信信道。
        异常
        TransportTimeoutException - 如果在等待目标VM连接时发生超时。
        IOException - 如果发生I / O错误(包括握手时超时)。
        IllegalArgumentException - 如果acceptTimeout参数的值或handshakeTimeout为负数,或者提供了无效的侦听键。
        IllegalStateException - 如果已使用此侦听密钥调用了 stopListening ,并且传输服务不再侦听入站连接。
        另请参见:
        TransportService.Capabilities.supportsAcceptTimeout()