- 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 class
TransportService.Capabilities
运输服务能力。static class
TransportService.ListenKey
一 键听 。
-
构造方法摘要
构造方法 构造器 描述 TransportService()
-
方法摘要
所有方法 实例方法 抽象方法 变量和类型 方法 描述 abstract Connection
accept(TransportService.ListenKey listenKey, long acceptTimeout, long handshakeTimeout)
接受来自目标VM的连接。abstract Connection
attach(String address, long attachTimeout, long handshakeTimeout)
附加到指定的地址。abstract TransportService.Capabilities
capabilities()
返回传输服务的功能。abstract String
description()
返回传输服务的描述。abstract String
name()
返回用于标识传输服务的名称。abstract TransportService.ListenKey
startListening()
侦听传输服务选择的地址。abstract TransportService.ListenKey
startListening(String address)
侦听入站连接的指定地址。abstract void
stopListening(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()
-
-