模块 jdk.jdi

类 TransportService

java.lang.Object
com.sun.jdi.connect.spi.TransportService

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

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

传输服务用于在调试器和目标 VM 之间建立连接,并通过底层通信协议传输 Java 调试线协议 (JDWP) 数据包。实质上,传输服务实现将 JDWP(如 JDWP规范 中指定的)绑定到底层通信协议。传输服务实现提供可靠的 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()
      返回传输服务的描述。
      返回:
      运输服务说明
    • capabilities

      public abstract TransportService.Capabilities  capabilities()
      返回传输服务的功能。
      返回:
      运输服务能力
    • attach

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

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

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

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

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

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

      参数:
      address - 开始监听连接的地址,或 null 监听传输服务选择的地址。
      返回:
      在后续调用中使用的监听键是 accept stopListening 方法。
      抛出:
      IOException - 如果发生 I/O 错误。
      IllegalArgumentException - 如果特定地址无效
    • startListening

      public abstract TransportService.ListenKey  startListening() throws IOException
      监听传输服务选择的地址。

      这个方便的方法就像调用 startListening(null) 一样工作。

      返回:
      在后续调用中使用的监听键是 accept stopListening 方法。
      抛出:
      IOException - 如果发生 I/O 错误。
    • stopListening

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

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

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

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

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

      接受来自目标 VM 的连接涉及两个步骤。首先,传输服务等待接受来自目标 VM 的连接。建立连接后,将执行握手以确保连接确实连接到目标 VM。握手涉及字符串的交换JDWP-握手Java 调试线协议 规范中所指定。

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