Класс 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

Spec-Zone .ru
спецификации, руководства, описания, API