- java.lang.Object
-
- com.sun.jdi.connect.spi.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
-
-
嵌套类汇总
嵌套类 变量和类型 类 描述 static classTransportService.Capabilities运输服务能力。static classTransportService.ListenKey一 键听 。
-
构造方法摘要
构造方法 构造器 描述 TransportService()
-
方法摘要
所有方法 实例方法 抽象方法 变量和类型 方法 描述 abstract Connectionaccept(TransportService.ListenKey listenKey, long acceptTimeout, long handshakeTimeout)接受来自目标VM的连接。abstract Connectionattach(String address, long attachTimeout, long handshakeTimeout)附加到指定的地址。abstract TransportService.Capabilitiescapabilities()返回传输服务的功能。abstract Stringdescription()返回传输服务的描述。abstract Stringname()返回用于标识传输服务的名称。abstract TransportService.ListenKeystartListening()侦听传输服务选择的地址。abstract TransportService.ListenKeystartListening(String address)侦听入站连接的指定地址。abstract voidstopListening(TransportService.ListenKey listenKey)停止侦听入站连接。
-
-
-
方法详细信息
-
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 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键是
accept或stopListening方法。 - 异常
-
IOException- 如果发生I / O错误。 -
IllegalArgumentException- 如果特定地址无效
-
startListening
public abstract TransportService.ListenKey startListening() throws IOException
侦听传输服务选择的地址。这种方便的方法就像调用
startListening(null)一样 。- 结果
-
在后续调用中使用的listen键是
accept或stopListening方法。 - 异常
-
IOException- 如果发生I / O错误。
-
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()
-
-