- java.lang.Object
-
- com.sun.jdi.connect.spi.TransportService
-
public abstract class TransportService extends Object
用于调试器和目标VM之间连接的传输服务。传输服务是这个类的具体子类,它具有零参数的构造函数,并实现下面指定的抽象方法。
Transport用于调试器和目标VM之间的连接的底层服务。传输服务用于在调试器和目标VM之间建立连接,并通过底层通信协议传输Java Debug Wire Protocol(JDWP)数据包。 实质上,传输服务实现将JDWP(如JDWP specification中所指定)绑定到底层通信协议。 传输服务实现提供可靠的JDWP分组传输服务。 JDWP数据包被发送到目标VM并从目标VM发送,而不会重复或数据丢失。 传输服务实现可以基于可靠或不可靠的底层通信协议。 如果底层通信协议是可靠的,则传输服务实现可以相对简单,并且可能仅需要将JDWP分组作为底层通信协议的有效载荷进行传输。 在不可靠的通信协议的情况下,传输服务实现可以包括额外的协议支持,以便确保分组不被重复并且没有数据丢失。 这些协议的细节特定于实现,但是可以涉及诸如传输控制协议(TCP)(见RFC 793 )的协议中使用的重传技术的肯定确认等技术。
传输服务可用于启动与目标虚拟机的连接。 这是通过调用
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 Classes Modifier and Type Class 描述 static classTransportService.Capabilities运输服务能力。static classTransportService.ListenKey听密钥 。
-
构造方法摘要
构造方法 Constructor 描述 TransportService()
-
方法摘要
所有方法 接口方法 抽象方法 Modifier and Type 方法 描述 abstract Connectionaccept(TransportService.ListenKey listenKey, long acceptTimeout, long handshakeTimeout)接受来自目标虚拟机的连接。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。 握手涉及交换Java Debug Wire Protocol规范中指定的字符串JDWP- 握手 。
- 参数
-
address- 目标虚拟机的地址。 -
attachTimeout- 如果此传输服务支持附加超时,并且如果attachTimeout为正,则指定在附加到目标VM时使用的超时(以毫秒为单位)(多或少)。 如果传输服务不支持附加超时,或者如果指定为attachTimeout为零,则不附加任何超时。 -
handshakeTimeout- 如果此传输服务支持握手超时,并且如果handshakeTimeout为正,则指定在与目标虚拟机握手时使用的超时(以毫秒为单位)(多或少)。 超时的确切用法特定于传输服务。 传输服务例如可以使用握手超时作为字符间超时,同时等待来自目标VM的JDWP握手消息。 或者,传输服务可以例如在握手交换的持续时间内使用handshakeTimeout作为超时。 如果传输服务不支持握手超时,或者如果指定了handshakeTimeout为零,则如果目标VM没有响应,则握手不会超时。 - 结果
- 该连接表示到目标VM的双向通信信道。
- 异常
-
TransportTimeoutException- 如果在建立连接时发生超时。 -
IOException- 如果发生I / O错误(包括握手超时)。 -
IllegalArgumentException- 如果地址无效或附加超时或握手超时的值为负。 - 另请参见:
-
TransportService.Capabilities.supportsAttachTimeout()
-
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中调用此方法时,使用相同的listen键,等待接受连接将导致该线程抛出IOException。 如果在accept中阻塞的线程已经接受来自目标VM的连接,并且正在与目标VM进行握手,则调用此方法不会导致线程抛出异常。- 参数
-
listenKey- 从以前的电话获得的听力密码为startListening(String)或startListening()。 - 异常
-
IllegalArgumentException- 如果IllegalArgumentException键无效 -
IOException- 如果发生I / O错误。
-
accept
public abstract Connection accept(TransportService.ListenKey listenKey, long acceptTimeout, long handshakeTimeout) throws IOException
接受来自目标虚拟机的连接。等待(无限期或超时)接受来自目标虚拟机的连接。 返回表示目标VM的双向通信通道的连接。
从目标VM接受连接涉及两个步骤。 首先,传输服务等待接受来自目标VM的连接。 建立连接后,执行握手以确保连接确实与目标VM。 握手涉及交换Java Debug Wire Protocol规范中指定的字符串JDWP- 握手 。
- 参数
-
listenKey- 从以前的电话获得的听力密码为startListening(String)或startListening()。 -
acceptTimeout- 如果此传输服务支持接受超时,并且如果acceptTimeout为正,则等待目标虚拟机连接时,阻塞最多可达acceptTimeout毫秒,或多或少。 如果传输服务不支持接受超时,或者如果acceptTimeout为零,则无限期地阻止目标VM连接。 -
handshakeTimeout- 如果此传输服务支持握手超时,并且如果handshakeTimeout为正,则指定与目标VM进行握手时使用的超时(以毫秒(或多或少)为单位)。 超时的确切用法特定于传输服务。 传输服务例如可以使用握手超时作为字符间超时,同时等待来自目标VM的JDWP握手消息。 或者,传输服务可以例如使用超时作为握手交换的持续时间的超时。 如果传输服务不支持握手超时,如果指定为handshakeTimeout为零,则如果目标VM没有响应,则握手不会超时。 - 结果
- 该连接表示到目标VM的双向通信信道。
- 异常
-
TransportTimeoutException- 如果在等待目标虚拟机连接时发生超时。 -
IOException- 如果发生I / O错误(包括握手超时)。 -
IllegalArgumentException- 如果acceptTimeout参数或handshakeTimeout的值为负值或提供无效的listen键。 -
IllegalStateException- 如果已经使用此listen键调用了stopListening,并且传输服务不再监听入站连接。 - 另请参见:
-
TransportService.Capabilities.supportsAcceptTimeout()
-
-