Module  jdk.jdi

Class TransportService



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

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

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

    传输服务可用于启动与目标虚拟机的连接。 这是通过调用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。 握手涉及交换Java Debug Wire Protocol规范中指定的字符串JDWP- 握手

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

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

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

        参数
        address - 开始侦听连接的地址,或 null监听由传输服务选择的地址。
        结果
        在随后的呼叫中使用的听密钥为 acceptstopListening方法。
        异常
        IOException - 如果发生I / O错误。
        IllegalArgumentException - 如果具体地址无效
      • accept

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

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

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

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