Класс TransportService
public abstract class TransportService extends Object
Сервис транспорта — это конкретный подкласс этого класса, имеющий конструктор без аргументов и реализующий абстрактные методы, указанные ниже. Это основной сервис, используемый Transport для соединений между отладчиком и целевой виртуальной машиной.
Сервис транспорта используется для установления соединения между отладчиком и целевой виртуальной машиной и для передачи пакетов протокола Java Debug Wire Protocol (JDWP) по основному протоколу связи. По сути, реализация сервиса транспорта связывает JDWP (как указано в спецификации JDWP) с основным протоколом связи. Реализация сервиса транспорта предоставляет надежный сервис передачи пакетов JDWP. Пакеты JDWP отправляются в целевую виртуальную машину и из неё без дублирования или потери данных. Реализация сервиса транспорта может быть основана на основном протоколе связи, который является надежным или ненадежным. Если основной протокол связи является надежным, то реализация сервиса транспорта может быть относительно простой и может потребовать только передачи пакетов JDWP в качестве полезной нагрузки основного протокола связи. В случае ненадежного протокола связи реализация сервиса транспорта может включать дополнительную поддержку протокола для обеспечения того, чтобы пакеты не дублировались и не было потери данных. Подробности таких протоколов зависят от реализации, но могут включать такие методы, как метод положительного подтверждения с повторной передачей, используемый в таких протоколах, как Transmission Control Protocol (TCP) (см. RFC 793).
Сервис транспорта может использоваться для инициализации подключения к целевой виртуальной машине. Это делается путём вызова метода attach(java.lang.String, long, long). В качестве альтернативы, сервис транспорта может прослушивать и принимать соединения, инициированные целевой виртуальной машиной. Это делается путём вызова метода startListening(String) для перевода транспорта в режим прослушивания. Затем метод accept(com.sun.jdi.connect.spi.TransportService.ListenKey, long, long) используется для принятия соединения, инициированного целевой виртуальной машиной.
- Since:
- 1.5
Краткое описание вложенных классов
| Модификатор и тип | Класс | Описание |
|---|---|---|
static class |
TransportService.Capabilities |
Возможности сервиса транспорта. |
static class |
TransportService.ListenKey |
Ключ прослушивания. |
Краткое описание конструкторов
| Конструктор | Описание |
|---|---|
TransportService() |
Конструктор для вызова подклассами. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
abstract Connection |
accept |
Принимает соединение от целевой виртуальной машины. |
abstract Connection |
attach |
Подключается к указанному адресу. |
abstract TransportService.Capabilities |
capabilities() |
Возвращает возможности сервиса транспорта. |
abstract String |
description() |
Возвращает описание сервиса транспорта. |
abstract String |
name() |
Возвращает имя для идентификации сервиса транспорта. |
abstract TransportService.ListenKey |
startListening() |
Прослушивает адрес, выбранный сервисом транспорта. |
abstract TransportService.ListenKey |
startListening |
Прослушивает указанный адрес для входящих соединений. |
abstract void |
stopListening |
Останавливает прослушивание входящих соединений. |
Подробное описание конструкторов
TransportService
public TransportService()
Подробное описание методов
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
Подключается к указанному адресу и возвращает соединение, представляющее двунаправленный канал связи с целевой виртуальной машиной.
Подключение к целевой виртуальной машине включает два этапа: во-первых, устанавливается соединение с указанным адресом. За этим следует рукопожатие для проверки того, что соединение предназначено для целевой виртуальной машины. Рукопожатие включает обмен строкой JDWP-Handshake, как указано в спецификации Java Debug Wire Protocol.
- Параметры:
-
address- Адрес целевой виртуальной машины. -
attachTimeout- Если эта транспортная служба поддерживает тайм-аут подключения, и еслиattachTimeoutположительно, то она задаёт тайм-аут в миллисекундах (приблизительно) для подключения к целевой виртуальной машине. Если транспортная служба не поддерживает тайм-аут подключения илиattachTimeoutравно нулю, подключение происходит без тайм-аута. -
handshakeTimeout- Если эта транспортная служба поддерживает тайм-аут рукопожатия, и еслиhandshakeTimeoutположительно, то она задаёт тайм-аут в миллисекундах (приблизительно) для рукопожатия с целевой виртуальной машиной. Точное использование тайм-аута зависит от транспортной службы. Например, транспортная служба может использовать тайм-аут рукопожатия как тайм-аут между символами при ожидании сообщения JDWP-Handshake от целевой виртуальной машины. Или же транспортная служба может использовать handshakeTimeout в качестве тайм-аута для всего процесса рукопожатия. Если транспортная служба не поддерживает тайм-аут рукопожатия илиhandshakeTimeoutравно нулю, рукопожатие не имеет тайм-аута, если от целевой виртуальной машины нет ответа. - Возвращает:
- Соединение, представляющее двунаправленный канал связи с целевой виртуальной машиной.
- Исключения:
-
TransportTimeoutException- Если происходит тайм-аут при установлении соединения. -
IOException- Если возникает ошибка ввода-вывода (включая тайм-аут при рукопожатии). -
IllegalArgumentException- Если адрес некорректен или значение тайм-аута подключения или тайм-аута рукопожатия отрицательно. - См. также:
startListening
public abstract TransportService.ListenKey startListening(String address) throws IOException
Этот метод запускает транспортную службу, прослушивающую указанный адрес, чтобы она могла впоследствии принять входящее соединение. Он не ждёт, пока будет установлено входящее соединение.
- Параметры:
-
address- Адрес для начала прослушивания соединений илиnullдля прослушивания адреса, выбранного транспортной службой. - Возвращает:
- ключ прослушивания, который будет использоваться в последующих вызовах методов
acceptилиstopListening. - Исключения:
-
IOException- Если возникает ошибка ввода-вывода. -
IllegalArgumentException- Если указанный адрес некорректен.
startListening
public abstract TransportService.ListenKey startListening() throws IOException
Этот метод удобен и работает так же, как вызов startListening(null).
- Возвращает:
- ключ прослушивания, который будет использоваться в последующих вызовах методов
acceptилиstopListening. - Исключения:
-
IOException- Если возникает ошибка ввода-вывода.
stopListening
public abstract void stopListening(TransportService.ListenKey listenKey) throws IOException
Вызов этого метода, в то время как другой поток заблокирован в методе accept с тем же ключом прослушивания, ожидая принятия соединения, приведёт к тому, что этот поток бросит исключение IOException. Если поток, заблокированный в accept, уже принял соединение от целевой виртуальной машины и находится в процессе рукопожатия с целевой виртуальной машиной, то вызов этого метода не заставит поток выбросить исключение.
- Параметры:
-
listenKey- Ключ прослушивания, полученный в предыдущем вызовеstartListening(String)илиstartListening(). - Исключения:
-
IllegalArgumentException- Если ключ прослушивания некорректен. -
IOException- Если возникает ошибка ввода-вывода.
accept
public abstract Connection accept(TransportService.ListenKey listenKey, long acceptTimeout, long handshakeTimeout) throws IOException
Ожидание (бесконечное или с тайм-аутом) принятия соединения от целевой виртуальной машины. Возвращает соединение, представляющее двунаправленный канал связи с целевой виртуальной машиной.
Принятие соединения от целевой виртуальной машины включает два этапа. Во-первых, транспортная служба ждёт принятия соединения от целевой виртуальной машины. После установления соединения выполняется рукопожатие для проверки того, что соединение действительно предназначено для целевой виртуальной машины. Рукопожатие включает обмен строкой JDWP-Handshake, как указано в спецификации Java Debug Wire Protocol.
- Параметры:
-
listenKey- Ключ прослушивания, полученный в предыдущем вызовеstartListening(String)илиstartListening(). -
acceptTimeout- если эта транспортная служба поддерживает тайм-аут приема, и еслиacceptTimeoutположительно, то блокировка происходит доacceptTimeoutмиллисекунд (примерно) во время ожидания подключения целевой виртуальной машины. Если транспортная служба не поддерживает тайм-аут приема илиacceptTimeoutравно нулю, то блокировка происходит неопределённо долго, ожидая подключения целевой виртуальной машины. -
handshakeTimeout- Если эта транспортная служба поддерживает тайм-аут рукопожатия, и еслиhandshakeTimeoutположительно, то это тайм-аут в миллисекундах (примерно) для рукопожатия с целевой виртуальной машиной. Точное использование тайм-аута зависит от транспортной службы. Например, транспортная служба может использовать тайм-аут рукопожатия как тайм-аут между символами при ожидании сообщения JDWP-Handshake от целевой виртуальной машины. В качестве альтернативы, транспортная служба может использовать тайм-аут в качестве тайм-аута для всего процесса рукопожатия. Если транспортная служба не поддерживает тайм-аут рукопожатия илиhandshakeTimeoutравно нулю, рукопожатие не имеет тайм-аута, если от целевой виртуальной машины нет ответа. - Возвращает:
- Соединение, представляющее двунаправленный канал связи с целевой виртуальной машиной.
- Исключения:
-
TransportTimeoutException- Если происходит тайм-аут ожидания подключения целевой виртуальной машины. -
IOException- Если возникает ошибка ввода-вывода (включая тайм-аут при рукопожатии). -
IllegalArgumentException- Если значение аргумента acceptTimeout или handshakeTimeout отрицательно, или предоставлен некорректный ключ прослушивания. -
IllegalStateException- ЕслиstopListeningбыл уже вызван с этим ключом прослушивания, и транспортная служба больше не прослушивает входящие подключения. - См. также:
© 1993, 2021, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
https://docs.oracle.com/en/java/javase/17/docs/api/jdk.jdi/com/sun/jdi/connect/spi/TransportService.html