Класс TransportService
- java.lang.Object
-
- com.sun.jdi.connect.spi.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) используется для приема соединения, инициированного целевой виртуальной машиной.
- С момента:
- 1.5
Вложенные классы
| Модификатор и тип | Класс | Описание |
|---|---|---|
static class | TransportService.Capabilities | Возможности сервиса транспорта. |
static class | TransportService.ListenKey | Ключ прослушивания. |
Конструкторы
| Конструктор | Описание |
|---|---|
TransportService() |
Методы
| Модификатор и тип | Метод | Описание |
|---|---|---|
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) | Остановить прослушивание входящих соединений. |
Методы, объявленные в классе java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait Конструкторы
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- Если адрес недействителен или значение таймаута подключения или таймаута рукопожатия отрицательно. - См. также:
TransportService.Capabilities.supportsAttachTimeout()
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уже был вызван с этим ключом для прослушивания и транспортная служба больше не прослушивает входящие соединения. - См. также:
TransportService.Capabilities.supportsAcceptTimeout()
© 1993, 2020, 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/11/docs/api/jdk.jdi/com/sun/jdi/connect/spi/TransportService.html