Spec-Zone.ru › OpenJDK 17

Класс MulticastSocket

java.lang.Object
java.net.DatagramSocket
java.net.MulticastSocket
Все реализованные интерфейсы:
Closeable, AutoCloseable
public class MulticastSocket extends DatagramSocket
A MulticastSocket — это сокет для дейтаграмм, удобный для отправки и получения IP-многоадресных дейтаграмм. Конструкторы MulticastSocket создают сокет с соответствующими параметрами сокета, которые делают его подходящим для получения многоадресных дейтаграмм. Класс MulticastSocket дополнительно определяет удобные методы-сеттеры и геттеры для параметров сокета, которые обычно используются многоадресными приложениями.

Подключение к одному или нескольким многоадресным группам позволяет получать многоадресные дейтаграммы, отправленные в эти группы.

IPv4-многоадресная группа задаётся IP-адресом класса D и стандартным номером порта UDP. IP-адреса класса D находятся в диапазоне 224.0.0.0 по 239.255.255.255, включительно. Адрес 224.0.0.0 зарезервирован и не должен использоваться.

Чтобы присоединиться к многоадресной группе, необходимо сначала создать MulticastSocket с нужным портом, а затем вызвать метод joinGroup, указав адрес группы и сетевой интерфейс, через который будут приниматься многоадресные дейтаграммы:


 // join a Multicast group and send the group salutations
 ...
 String msg = "Hello";
 InetAddress mcastaddr = InetAddress.getByName("228.5.6.7");
 InetSocketAddress group = new InetSocketAddress(mcastaddr, 6789);
 NetworkInterface netIf = NetworkInterface.getByName("bge0");
 MulticastSocket s = new MulticastSocket(6789);

 s.joinGroup(new InetSocketAddress(mcastaddr, 0), netIf);
 byte[] msgBytes = msg.getBytes(StandardCharsets.UTF_8);
 DatagramPacket hi = new DatagramPacket(msgBytes, msgBytes.length, group);
 s.send(hi);
 // get their responses!
 byte[] buf = new byte[1000];
 DatagramPacket recv = new DatagramPacket(buf, buf.length);
 s.receive(recv);
 ...
 // OK, I'm done talking - leave the group...
 s.leaveGroup(group, netIf);
 
Когда кто-то отправляет сообщение в многоадресную группу, все подписавшиеся получатели на этом хосте и порту получают это сообщение (в пределах времени жизни пакета, см. ниже). Сокету не обязательно быть участником многоадресной группы для отправки сообщений в неё.

Когда сокет подписывается на многоадресную группу/порт, он получает дейтаграммы, отправленные другими хостами в эту группу/порт, как и все остальные члены группы и порта. Сокет отказывается от членства в группе путём вызова метода leaveGroup(SocketAddress mcastaddr, NetworkInterface netIf). Несколько MulticastSockets могут одновременно подписаться на многоадресную группу и порт, и они все будут получать многоадресные дейтаграммы.

Классы DatagramSocket и MulticastSocket определяют удобные методы для установки и получения нескольких параметров сокета. Как и DatagramSocket, этот класс также поддерживает методы setOption и getOption для установки и запроса параметров сокета. Множество поддерживаемых параметров сокета определено в DatagramSocket. Дополнительные (специфичные для реализации) параметры также могут быть поддерживаемы.

Примечание API:
DatagramSocket может использоваться напрямую для отправки и получения многоадресных дейтаграмм. DatagramChannel реализует интерфейс MulticastChannel и предоставляет альтернативный API для отправки и получения многоадресных дейтаграмм. API MulticastChannel поддерживает как многоадресную рассылку любого источника, так и многоадресную рассылку с указанием источника. Рассмотрите возможность использования DatagramChannel для многоадресной рассылки.
С:
1.1

Краткое описание конструкторов

Конструктор Описание
MulticastSocket()
Конструирует многоадресный сокет и связывает его с любым доступным портом на локальном хосте.
MulticastSocket(int port)
Конструирует многоадресный сокет и связывает его с указанным портом на локальном хосте.
MulticastSocket(SocketAddress bindaddr)
Создаёт многоадресный сокет, привязанный к указанному локальному адресу сокета.

Краткое описание методов

Модификатор и тип Метод Описание
InetAddress getInterface()
Устарело.
Сетевой интерфейс может не быть однозначно определён возвращаемым InetAddress.
boolean getLoopbackMode()
Устарело.
Используйте DatagramSocket.getOption(SocketOption) с StandardSocketOptions.IP_MULTICAST_LOOP вместо этого.
NetworkInterface getNetworkInterface()
Получить сетевой интерфейс многоадресной рассылки, заданный для исходящих многоадресных дейтаграмм, отправленных из этого сокета.
int getTimeToLive()
Получить значение по умолчанию для времени жизни многоадресных пакетов, отправленных через сокет.
byte getTTL()
Устарело.
Используйте метод getTimeToLive() вместо этого, который возвращает int вместо byte.
void joinGroup(InetAddress mcastaddr)
Устарело.
Этот метод не принимает сетевой интерфейс, на котором необходимо присоединиться к многоадресной группе.
void joinGroup(SocketAddress mcastaddr, NetworkInterface netIf)
Подключается к многоадресной группе.
void leaveGroup(InetAddress mcastaddr)
Устарело.
Этот метод не принимает сетевой интерфейс, с которого необходимо выйти из многоадресной группы.
void leaveGroup(SocketAddress mcastaddr, NetworkInterface netIf)
Выход из многоадресной группы на указанном локальном интерфейсе.
void send(DatagramPacket p, byte ttl)
Устарело.
Используйте следующий код или его эквивалент вместо этого:
void setInterface(InetAddress inf)
Устарело.
InetAddress может не однозначно идентифицировать сетевой интерфейс.
void setLoopbackMode(boolean disable)
Устарело.
Используйте DatagramSocket.setOption(SocketOption, Object) с StandardSocketOptions.IP_MULTICAST_LOOP вместо этого.
void setNetworkInterface(NetworkInterface netIf)
Указывает сетевой интерфейс для исходящих многоадресных дейтаграмм, отправляемых через этот сокет.
void setTimeToLive(int ttl)
Устанавливает время жизни по умолчанию для многоадресных пакетов, отправляемых из этого MulticastSocket, для управления областью действия многоадресной рассылки.
void setTTL(byte ttl)
Устарело.
Используйте метод setTimeToLive(int) вместо этого, который использует int вместо byte в качестве типа для ttl.

Методы, унаследованные от класса java.net.DatagramSocket

bind, close, connect, connect, disconnect, getBroadcast, getChannel, getInetAddress, getLocalAddress, getLocalPort, getLocalSocketAddress, getOption, getPort, getReceiveBufferSize, getRemoteSocketAddress, getReuseAddress, getSendBufferSize, getSoTimeout, getTrafficClass, isBound, isClosed, isConnected, receive, send, setBroadcast, setDatagramSocketImplFactory, setOption, setReceiveBufferSize, setReuseAddress, setSendBufferSize, setSoTimeout, setTrafficClass, supportedOptions

Методы, унаследованные от класса java.lang.Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Подробное описание конструкторов

MulticastSocket

public MulticastSocket() throws IOException
Создаёт сокет для мультикаста и привязывает его к любому доступному порту на локальном хосте. Сокет будет привязан к адресу wildcard.

Если существует менеджер безопасности, его метод checkListen вызывается в первую очередь с аргументом 0, чтобы убедиться в разрешении операции. Это может привести к исключению SecurityException.

При создании сокета вызывается метод DatagramSocket.setReuseAddress(boolean) для включения опции сокета SO_REUSEADDR.

Исключения:
IOException - если при создании MulticastSocket произошла ошибка ввода-вывода
SecurityException - если менеджер безопасности существует и его метод checkListen не разрешает операцию.
См. также:
  • SecurityManager.checkListen(int)
  • DatagramSocket.setReuseAddress(boolean)
  • DatagramSocketImpl.setOption(SocketOption, Object)

MulticastSocket

public MulticastSocket(int port) throws IOException
Создаёт сокет для мультикаста и привязывает его к указанному порту на локальном хосте. Сокет будет привязан к адресу wildcard.

Если существует менеджер безопасности, его метод checkListen вызывается в первую очередь с аргументом port для обеспечения разрешения операции. Это может привести к исключению SecurityException.

При создании сокета вызывается метод DatagramSocket.setReuseAddress(boolean) для включения опции сокета SO_REUSEADDR.

Параметры:
port - используемый порт
Исключения:
IOException - если при создании MulticastSocket произошла ошибка ввода-вывода
SecurityException - если менеджер безопасности существует и его метод checkListen не разрешает операцию.
IllegalArgumentException - если порт находится вне допустимого диапазона.
См. также:
  • SecurityManager.checkListen(int)
  • DatagramSocket.setReuseAddress(boolean)

MulticastSocket

public MulticastSocket(SocketAddress bindaddr) throws IOException
Создаёт сокет для мультикаста, привязанный к указанному локальному адресу сокета.

Если адрес null будет создан сокет без привязки.

Если существует менеджер безопасности, его метод checkListen вызывается в первую очередь с портом SocketAddress в качестве аргумента, чтобы обеспечить разрешение операции. Это может привести к исключению SecurityException.

При создании сокета вызывается метод DatagramSocket.setReuseAddress(boolean) для включения опции сокета SO_REUSEADDR.

Параметры:
bindaddr - Адрес сокета для привязки или null для сокета без привязки.
Исключения:
IOException - если при создании MulticastSocket произошла ошибка ввода-вывода
SecurityException - если менеджер безопасности существует и его метод checkListen не разрешает операцию.
С:
1.4
См. также:
  • SecurityManager.checkListen(int)
  • DatagramSocket.setReuseAddress(boolean)

Подробное описание методов

setTTL

@Deprecated public void setTTL(byte ttl) throws IOException
Устарело.
используйте метод setTimeToLive(int) вместо него, который использует int вместо byte в качестве типа для ttl.
Устанавливает значение time-to-live для пакетов мультикаста, отправляемых из этого MulticastSocket, чтобы контролировать область действия мультикаста.

ttl – это безусловное 8-битовое значение и поэтому должно находиться в диапазоне 0 <= ttl <= 0xFF .

Параметры:
ttl - время жизни
Исключения:
IOException - если при установке значения по умолчанию time-to-live произошла ошибка ввода-вывода
См. также:
  • getTTL()

setTimeToLive

public void setTimeToLive(int ttl) throws IOException
Устанавливает значение по умолчанию time-to-live для пакетов мультикаста, отправляемых из этого MulticastSocket, чтобы контролировать область действия мультикаста.

ttl должен находиться в диапазоне 0 <= ttl <= 255 или будет брошено IllegalArgumentException. Пакеты мультикаста, отправленные с TTL 0, не передаются по сети, но могут быть доставлены локально.

Примечание API:
Этот метод эквивалентен вызову setOption(StandardSocketOptions.IP_MULTICAST_TTL, ttl).
Параметры:
ttl - время жизни
Исключения:
IOException - если при установке значения по умолчанию time-to-live произошла ошибка ввода-вывода
С:
1.2
См. также:
  • getTimeToLive()
  • StandardSocketOptions.IP_MULTICAST_TTL

getTTL

@Deprecated public byte getTTL() throws IOException
Устарело.
используйте метод getTimeToLive() вместо него, который возвращает int вместо byte.
Получение значения по умолчанию time-to-live для пакетов мультикаста, отправляемых через сокет.
Возвращает:
значение по умолчанию time-to-live
Исключения:
IOException - если при получении значения по умолчанию time-to-live произошла ошибка ввода-вывода
См. также:
  • setTTL(byte)

getTimeToLive

public int getTimeToLive() throws IOException
Получение значения по умолчанию time-to-live для пакетов мультикаста, отправляемых через сокет.
Примечание API:
Этот метод эквивалентен вызову getOption(StandardSocketOptions.IP_MULTICAST_TTL).
Возвращает:
значение по умолчанию time-to-live
Исключения:
IOException - если при получении значения по умолчанию time-to-live произошла ошибка ввода-вывода
С:
1.2
См. также:
  • setTimeToLive(int)
  • StandardSocketOptions.IP_MULTICAST_TTL

joinGroup

@Deprecated(since="14") public void joinGroup(InetAddress mcastaddr) throws IOException
Устарело.
Этот метод не принимает сетевой интерфейс для присоединения к группе мультикаста. Используйте joinGroup(SocketAddress, NetworkInterface) вместо этого.
Присоединяется к группе мультикаста. Его поведение может быть повлияно setInterface или setNetworkInterface.

Если существует менеджер безопасности, этот метод сначала вызывает его метод checkMulticast с аргументом mcastaddr.

Примечание API:
Вызов этого метода эквивалентен вызову joinGroup(new InetSocketAddress(mcastaddr, 0), null).
Параметры:
mcastaddr - адрес мультикаста для присоединения
Исключения:
IOException - если при присоединении произошла ошибка, или адрес не является адресом мультикаста, или платформа не поддерживает мультикаст
SecurityException - если менеджер безопасности существует и его метод checkMulticast не разрешает присоединение.
См. также:
  • SecurityManager.checkMulticast(InetAddress)

leaveGroup

@Deprecated(since="14") public void leaveGroup(InetAddress mcastaddr) throws IOException
Устарело.
Этот метод не принимает сетевой интерфейс для выхода из группы мультикаста. Используйте leaveGroup(SocketAddress, NetworkInterface) вместо этого.
Выходит из группы мультикаста. Его поведение может быть повлияно setInterface или setNetworkInterface.

Если существует менеджер безопасности, этот метод сначала вызывает его метод checkMulticast с аргументом mcastaddr.

Примечание API:
Вызов этого метода эквивалентен вызову leaveGroup(new InetSocketAddress(mcastaddr, 0), null).
Параметры:
mcastaddr - адрес мультикаста для выхода
Исключения:
IOException - если при выходе произошла ошибка или адрес не является адресом мультикаста.
SecurityException - если менеджер безопасности существует и его метод checkMulticast не разрешает операцию.
См. также:
  • SecurityManager.checkMulticast(InetAddress)

присоединитьсяКГруппе

public void joinGroup(SocketAddress mcastaddr, NetworkInterface netIf) throws IOException
Присоединяется к мультигруппе.

Для присоединения к мультигруппе вызывающий объект должен указать IP-адрес мультигруппы и локальный сетевой интерфейс для получения пакетов мультигруппы.

  • Аргумент mcastaddr указывает IP-адрес мультигруппы для присоединения. По историческим причинам это указывается как SocketAddress. Реализация по умолчанию поддерживает только InetSocketAddress, и информация о порте port игнорируется.
  • Аргумент netIf указывает локальный интерфейс для приема пакетов мультигрупповых датаграмм или null, чтобы использовать интерфейс, установленный для исходящих пакетов мультигруппы. Если null, и интерфейс не установлен, поведение не определено: может быть выбран любой интерфейс, или операция может завершиться ошибкой с SocketException.

Этот метод можно вызывать несколько раз, чтобы присоединиться к нескольким различным мультигруппам или присоединиться к одной группе в нескольких разных сетях. Однако, если сокет уже является членом группы, будет брошено исключение IOException.

Если есть менеджер безопасности, этот метод сначала вызывает его метод checkMulticast с аргументом mcastaddr.

Переопределяет:
joinGroup в классе DatagramSocket
Параметры:
mcastaddr - указывает адрес мультигруппы для присоединения.
netIf - указывает локальный интерфейс для приема пакетов мультигрупповых датаграмм или null.
Исключения:
IOException - если произошла ошибка при присоединении, или когда адрес не является мультиадресным, или платформа не поддерживает мультивещание
SecurityException - если существует менеджер безопасности, и его метод checkMulticast не разрешает присоединение.
IllegalArgumentException - если mcastaddr null или является подклассом SocketAddress, не поддерживаемым этим сокетом
С:
1.4
См. также:
  • SecurityManager.checkMulticast(InetAddress)
  • MulticastChannel.join(InetAddress, NetworkInterface)
  • StandardSocketOptions.IP_MULTICAST_IF
  • setNetworkInterface(NetworkInterface)
  • setInterface(InetAddress)

выйтиИзГруппы

public void leaveGroup(SocketAddress mcastaddr, NetworkInterface netIf) throws IOException
Выходит из мультигруппы на указанном локальном интерфейсе.

Если есть менеджер безопасности, этот метод сначала вызывает его метод checkMulticast с аргументом mcastaddr.

Переопределяет:
leaveGroup в классе DatagramSocket
Примечание API:
Аргументы mcastaddr и netIf должны идентифицировать мультигруппу, которая ранее была присоединена к этому DatagramSocket.

Этот метод можно вызывать несколько раз, чтобы выйти из нескольких разных мультигрупп, к которым ранее присоединялись, или выйти из одной и той же группы, к которой ранее присоединялись в нескольких разных сетях. Однако, если сокет не является членом указанной группы в указанной сети, будет брошено исключение IOException.

Параметры:
mcastaddr - это адрес мультигруппы, из которой необходимо выйти. Он должен содержать тот же IP-адрес, что и тот, который использовался для присоединения к группе.
netIf - указывает локальный интерфейс или null для перехода к интерфейсу, установленному для исходящих мультигрупповых датаграмм. Если null, и интерфейс не установлен, поведение не определено: может быть выбран любой интерфейс, или операция может завершиться ошибкой с SocketException.
Исключения:
IOException - если произошла ошибка при выходе, или когда адрес не является мультиадресным.
SecurityException - если существует менеджер безопасности, и его метод checkMulticast не разрешает операцию.
IllegalArgumentException - если mcastaddr null или является подклассом SocketAddress, не поддерживаемым этим сокетом.
С:
1.4
См. также:
  • SecurityManager.checkMulticast(InetAddress)
  • joinGroup(SocketAddress, NetworkInterface)

установитьИнтерфейс

@Deprecated(since="14") public void setInterface(InetAddress inf) throws SocketException
Устарело.
Адрес InetAddress может не однозначно идентифицировать сетевой интерфейс. Используйте setNetworkInterface(NetworkInterface) вместо этого.
Устанавливает сетевой интерфейс мультигруппы, используемый методами, поведение которых зависит от значения сетевого интерфейса. Полезно для хостов с несколькими сетевыми картами.
Параметры:
inf - InetAddress
Исключения:
SocketException - если произошла ошибка в базовом протоколе, например, ошибка TCP.
См. также:
  • getInterface()

получитьИнтерфейс

@Deprecated(since="14") public InetAddress getInterface() throws SocketException
Устарело.
Сетевой интерфейс может не быть однозначно идентифицирован возвращаемым InetAddress. Используйте getNetworkInterface() вместо этого.
Возвращает адрес сетевого интерфейса, используемого для пакетов мультигруппы.
Возвращает:
InetAddress, представляющий адрес сетевого интерфейса, используемого для пакетов мультигруппы, или если интерфейс не установлен, InetAddress, представляющий любой локальный адрес.
Исключения:
SocketException - если произошла ошибка в базовом протоколе, например, ошибка TCP.
См. также:
  • setInterface(java.net.InetAddress)

установитьСетевойИнтерфейс

public void setNetworkInterface(NetworkInterface netIf) throws SocketException
Указывает сетевой интерфейс для исходящих пакетов мультигруппы, отправляемых по этому сокету.
Примечание API:
Этот метод эквивалентен вызову setOption(StandardSocketOptions.IP_MULTICAST_IF, netIf).
Параметры:
netIf - интерфейс
Исключения:
SocketException - если произошла ошибка в базовом протоколе, например, ошибка TCP.
С:
1.4
См. также:
  • getNetworkInterface()
  • StandardSocketOptions.IP_MULTICAST_IF

получитьСетевойИнтерфейс

public NetworkInterface getNetworkInterface() throws SocketException
Получить сетевой интерфейс мультигруппы, установленный для исходящих пакетов мультигруппы, отправляемых из этого сокета.
Примечание API:
Когда интерфейс установлен, этот метод эквивалентен вызову getOption(StandardSocketOptions.IP_MULTICAST_IF).
Возвращает:
Установленный в данный момент интерфейс мультигруппы. NetworkInterface возвращается, если интерфейс не установлен; он содержит единственный InetAddress для представления любого локального адреса.
Исключения:
SocketException - если произошла ошибка в базовом протоколе, например, ошибка TCP.
С:
1.4
См. также:
  • setNetworkInterface(NetworkInterface)
  • StandardSocketOptions.IP_MULTICAST_IF

установитьРежимПетли

@Deprecated(since="14") public void setLoopbackMode(boolean disable) throws SocketException
Устарело.
Используйте DatagramSocket.setOption(SocketOption, Object) с StandardSocketOptions.IP_MULTICAST_LOOP вместо этого. Режим петли включен по умолчанию, MulticastSocket.setOption(StandardSocketOptions.IP_MULTICAST_LOOP, false) отключает его.
Отключение/Включение локальной петли мультигрупповых датаграмм. Опция используется кодом сетевого стека платформы как подсказка, чтобы установить, будет ли мультигрупповая информация возвращаться в локальный сокет.

Поскольку эта опция является подсказкой, приложения, которые хотят проверить, какой режим петли установлен, должны вызвать getLoopbackMode()

Параметры:
disable - true для отключения режима петли
Исключения:
SocketException - если произошла ошибка при установке значения
С:
1.4
См. также:
  • getLoopbackMode()

получитьРежимПетли

@Deprecated(since="14") public boolean getLoopbackMode() throws SocketException
Устарело.
Используйте DatagramSocket.getOption(SocketOption) с StandardSocketOptions.IP_MULTICAST_LOOP вместо этого.
Получить установку для локальной петли мультигрупповых датаграмм.
Возвращает:
true, если режим петли был отключен
Исключения:
SocketException - если произошла ошибка при получении значения
С:
1.4
См. также:
  • setLoopbackMode(boolean)

send

@Deprecated public void send(DatagramPacket p, byte ttl) throws IOException
Устарело.
Используйте следующий код или его эквивалент вместо него:
  ......
  int ttl = mcastSocket.getOption(StandardSocketOptions.IP_MULTICAST_TTL);
  mcastSocket.setOption(StandardSocketOptions.IP_MULTICAST_TTL, newttl);
  mcastSocket.send(p);
  mcastSocket.setOption(StandardSocketOptions.IP_MULTICAST_TTL, ttl);
  ......
Отправляет пакет Datagram в пункт назначения с TTL (время жизни) отличным от значения по умолчанию для сокета. Этот метод необходимо использовать только в случаях, когда требуется определенное значение TTL; в противном случае предпочтительнее установить значение TTL один раз для сокета и использовать это значение по умолчанию для всех пакетов. Этот метод не изменяет значение TTL по умолчанию для сокета. Его поведение может быть повлияно на setInterface.

Если существует менеджер безопасности, этот метод сначала выполняет некоторые проверки безопасности. Во-первых, если p.getAddress().isMulticastAddress() истинно, этот метод вызывает метод менеджера безопасности checkMulticast с p.getAddress() и ttl в качестве аргументов. Если результат вычисления этого выражения ложно, этот метод вместо этого вызывает метод менеджера безопасности checkConnect с аргументами p.getAddress().getHostAddress() и p.getPort(). Каждый вызов метода менеджера безопасности может привести к исключению SecurityException, если операция не разрешена.

Параметры:
p - пакет, который нужно отправить. Пакет должен содержать адрес IP целевого многоадресной группы и данные, которые нужно отправить. Для отправки пакетов на адрес назначения многоадресной группы не обязательно быть членом группы.
ttl - необязательное время жизни для пакета многоадресной рассылки. Значение TTL по умолчанию равно 1.
Исключения:
IOException - возникает, если произошла ошибка, например, ошибка при установке TTL.
SecurityException - если менеджер безопасности существует и его метод checkMulticast или checkConnect не разрешает отправку.
PortUnreachableException - может быть вызвано, если сокет подключен к в настоящее время недоступному пункту назначения. Заметим, что нет гарантии, что исключение будет выброшено.
IllegalArgumentException - если сокет подключен, и адрес подключения отличается от адреса пакета, или если сокет не подключен, и адрес пакета не задан, или если его порт находится вне диапазона.
См. также:
  • DatagramSocket.send(java.net.DatagramPacket)
  • DatagramSocket.receive(java.net.DatagramPacket)
  • SecurityManager.checkMulticast(java.net.InetAddress, byte)
  • SecurityManager.checkConnect(java.lang.String, int)

© 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/java.base/java/net/MulticastSocket.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API