传输服务是此类的具体子类,它具有零参数构造函数并实现下面指定的抽象方法。它是 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
-
内部类总结
内部类修饰符和类型类描述static class运输服务能力。static classA 听键. -
构造方法总结
构造方法 -
方法总结
修饰符和类型方法描述abstract Connectionaccept(TransportService.ListenKey listenKey, long acceptTimeout, long handshakeTimeout) 接受来自目标 VM 的连接。abstract Connection附加到指定地址。abstract TransportService.Capabilities返回传输服务的功能。abstract String返回传输服务的描述。abstract Stringname()返回一个名称来标识传输服务。abstract TransportService.ListenKey监听传输服务选择的地址。abstract TransportService.ListenKeystartListening(String address) 监听入站连接的指定地址。abstract voidstopListening(TransportService.ListenKey listenKey) 停止监听入站连接。
-
构造方法详细信息
-
TransportService
public TransportService()子类调用的构造方法。
-
-
方法详情
-
name
返回一个名称来标识传输服务。- 返回:
- 运输服务名称
-
description
返回传输服务的描述。- 返回:
- 运输服务说明
-
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
监听入站连接的指定地址。此方法启动监听指定地址的传输服务,以便它随后可以接受入站连接。它不会等到入站连接建立。
- 参数:
address- 开始监听连接的地址,或null监听传输服务选择的地址。- 返回:
-
在后续调用中使用的监听键是
accept或stopListening方法。 - 抛出:
IOException- 如果发生 I/O 错误。IllegalArgumentException- 如果特定地址无效
-
startListening
监听传输服务选择的地址。这个方便的方法就像调用
startListening(null)一样工作。- 返回:
-
在后续调用中使用的监听键是
accept或stopListening方法。 - 抛出:
IOException- 如果发生 I/O 错误。
-
stopListening
停止监听入站连接。当另一个线程在
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已使用此监听键调用并且传输服务不再监听入站连接。- 参见:
-