Класс 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.
- Параметры:
-
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.
- Параметры:
-
listenKey- Ключ прослушивания, полученный при предыдущем вызовеstartListening(String)илиstartListening(). -
acceptTimeout- если эта транспортная служба поддерживает таймаут ожидания, и еслиacceptTimeoutположительно, то приостановиться доacceptTimeoutмиллисекунд, более или менее, ожидая подключения целевой виртуальной машины. Если транспортная служба не поддерживает таймаут ожидания или еслиacceptTimeoutравно нулю, то приостановиться неопределённо, ожидая подключения целевой виртуальной машины. -
handshakeTimeout- Если эта транспортная служба поддерживает таймаут рукопожатия, и еслиhandshakeTimeoutположительно, то задаёт таймаут, в миллисекундах (приблизительно), для использования при рукопожатии с целевой виртуальной машиной. Точное использование таймаута специфично для транспортной службы. Например, транспортная служба может использовать таймаут рукопожатия как таймаут между символами при ожидании сообщения JDWP-Handshake от целевой виртуальной машины. В качестве альтернативы, транспортная служба может использовать таймаут для всего периода рукопожатия. Если транспортная служба не поддерживает таймаут рукопожатия или еслиhandshakeTimeoutзадано как ноль, то рукопожатие не имеет таймаута, если от целевой виртуальной машины нет ответа. - Возвращает:
- Соединение, представляющее двунаправленный канал связи с целевой виртуальной машиной.
- Исключение:
-
TransportTimeoutException- Если произошел таймаут ожидания подключения целевой виртуальной машины. -
IOException- Если произошла ошибка ввода-вывода (включая таймаут при рукопожатии). -
IllegalArgumentException- Если значение аргумента acceptTimeout или handshakeTimeout отрицательно, или предоставлен недействительный ключ прослушивания. -
IllegalStateException- ЕслиstopListeningуже был вызван с этим ключом прослушивания и транспортная служба больше не прослушивает входящие подключения. - См. также:
© 1993, 2025, 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://download.java.net/java/early_access/jdk24/docs/api/jdk.jdi/com/sun/jdi/connect/spi/TransportService.html