- 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 class
TransportService.Capabilities
运输服务能力。static class
TransportService.ListenKey
听密钥 。
-
构造方法摘要
构造方法 Constructor 描述 TransportService()
-
方法摘要
所有方法 接口方法 抽象方法 Modifier and Type 方法 描述 abstract Connection
accept(TransportService.ListenKey listenKey, long acceptTimeout, long handshakeTimeout)
接受来自目标虚拟机的连接。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。 握手涉及交换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()
-
-