传输服务是这个类的一个具体子类,具有零参数构造函数并实现下面指定的抽象方法。它是由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
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic class传输服务的能力。static class一个监听键。 -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionabstract 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) 停止监听传入连接。
-
Constructor Details
-
TransportService
public TransportService()子类调用的构造函数。
-
-
Method Details
-
name
返回用于标识传输服务的名称。- 返回:
- 传输服务的名称
-
description
返回传输服务的描述。- 返回:
- 传输服务的描述
-
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
在指定地址上监听传入连接。此方法启动传输服务在指定地址上监听,以便随后接受传入连接。它不会等待直到建立传入连接。
- 参数:
-
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-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,并且传输服务不再监听入站连接。 - 参见:
-