Класс TransportService
public abstract class TransportService extends Object
Услуга транспорта — это конкретный подкласс этого класса, имеющий конструктор без аргументов и реализующий абстрактные методы, указанные ниже. Это основная служба, используемая Transport для подключения между отладчиком и целевой виртуальной машиной.
Услуга транспорта используется для установления соединения между отладчиком и целевой виртуальной машиной и для передачи пакетов протокола Java Debug Wire (JDWP) по протоколу связи нижнего уровня. По сути, реализация службы транспорта связывает JDWP (как указано в спецификации JDWP) с протоколом связи нижнего уровня. Реализация службы транспорта предоставляет надёжную службу передачи пакетов JDWP. Пакеты JDWP отправляются в целевую виртуальную машину и из неё без дублирования или потери данных. Реализация службы транспорта может быть основана на протоколе связи нижнего уровня, который является надёжным или ненадежным. Если протокол связи нижнего уровня надёжен, то реализация службы транспорта может быть относительно простой и может потребовать только передачи пакетов JDWP в качестве полезной нагрузки протокола связи нижнего уровня. В случае ненадежного протокола связи нижнего уровня реализация службы транспорта может включать дополнительную поддержку протокола для обеспечения того, чтобы пакеты не дублировались и не происходила потеря данных. Подробности таких протоколов зависят от реализации, но могут включать такие методы, как метод положительного подтверждения с повторной передачей, используемый в таких протоколах, как протокол управления передачей (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. Если поток, заблокированный в приеме, уже принял соединение от целевой виртуальной машины и находится в процессе рукопожатия с целевой виртуальной машиной, вызов этого метода не приведет к тому, что поток сгенерирует исключение.
- Параметры:
-
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, 2023, 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/21/docs/api/jdk.jdi/com/sun/jdi/connect/spi/TransportService.html