Module jdk.jdi

Class 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之间发送和接收,不会重复或丢失数据。传输服务实现可以基于可靠或不可靠的底层通信协议。如果底层通信协议是可靠的,那么传输服务实现可能相对简单,可能只需要将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
  • Constructor Details

    • TransportService

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

    • 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-Handshake,如在Java调试线协议规范中指定。

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

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

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

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

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

      此便利方法的工作方式类似于调用startListening(null)

      返回:
      用于在后续调用中使用的监听键acceptstopListening方法。
      抛出:
      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-Handshake,如在Java调试线协议规范中指定。

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