reckfellENGINE

Upnp

Функции Университетский канал и игра (UPnP) для обнаружения сетевых устройств, запросов и переадресации портов.

На этой странице
class UpnpReckfellSharpНаследует RefCounted

Функции Университетский канал и игра (UPnP) для обнаружения сетевых устройств, запросов и переадресации портов.

Этот класс можно использовать для обнаружения совместимых UpnpDevice в локальной сети и выполнения команд на них, таких как управление сопоставлениями портов (для переадресации портов/обхода NAT) и запрос локального и удаленного сетевого IP-адреса. Обратите внимание, что методы этого класса являются синхронными и блокируют вызывающий поток. Чтобы перенаправить определенный порт (здесь 7777, обратите внимание, что и Upnp.Discover, и Upnp.AddPortMapping могут возвращать ошибки, которые следует проверить):

Чтобы закрыть определенный порт (например, после того, как вы закончили его использовать):

Текст
upnp.delete_port_mapping(port)

Примечание: Обнаружение UPnP блокирует текущий поток. Чтобы выполнить обнаружение без блокировки основного потока, используйте ReckfellThread-ы следующим образом:

Терминология: В контексте сетевого взаимодействия UPnP "gateway" (или "интернет-вратное устройство", короткий IDG) означает сетевые устройства, которые позволяют компьютерам в местной сети получать доступ к Интернету ("повсеместная вычислительная сеть", WAN). Пайтфоллы:

  • Как уже говорилось выше, эти звонки блокируются и не должны работать на главной нитью, особенно потому, что они могут блокироваться на несколько секунд за раз.
  • Сетевая сеть — это физический и грязный процесс. Пакеты теряются в пути или фильтруются, адреса, свободные порты и присвоенные карты, и устройства могут выходить из сети или присоединяться к ней в любое время. Не забывайте об этом, будьте внимательны при проверке и обработке ошибок, и справляйтесь с ними изящно, если вы можете: добавить ясную ошибку UI, тайм-аут и повторное обслуживание.
  • Картирование портов может изменяться (и быть удалено) в любое время, а дистанционные/внешние карты могут быть удалены. IP Адрес портала может также измениться. IP и пытаться периодически обновлять/обновлять карты портов (например, каждые 5 минут и в случае сбоев в работе сетей).
  • Не все устройства поддерживают UPnP, и некоторые пользователи отключают UPNP поддержку. Вы должны справиться с этим (например, документирование и требование к пользователю о ручном пересылке портов или добавление альтернативных методов траверсального NAT, например реле/сервер зеркала, или прокол NAT дыр, STUN/TURN и т.д.).
  • Взгляните на то, что происходит при составлении карт конфликтов. Возможно, несколько пользователей одной и той же сети хотели бы играть в вашу игру одновременно, или, возможно, другое приложение использует тот же порт. Сделайте порт сконфигурируемым и оптимальным выбором порта автоматически (перепробовать с другим портом в случае отказа). Читать далее: Если вы хотите узнать больше о UPnP (и Интернет-приборе) и Порте Control Протокол (ПХФ), в частности), Википедия(https://en.wikipedia.org/wiki/Universal_Plug_and_Play) - хорошая первая остановка, спецификация может быть найдена на Фонд открытого подключения и осуществление Reckfell основано на Клиент мини-УПП.

Объявления сверены с C# SDK 1.0.0. Раскройте имя, чтобы увидеть сигнатуры и описание.

Конструкторы1

UpnpКонструктор
# Upnp
C#
public Upnp();

Свойства3

DiscoverIpv6Свойство
# DiscoverIpv6
C#
public bool DiscoverIpv6 { get; set; }

Если true, IPv6 используется для обнаружения UpnpDevice.

DiscoverLocalPortСвойство
# DiscoverLocalPort
C#
public int DiscoverLocalPort { get; set; }

Если 0, локальный порт для использования при обнаружении выбирается системой автоматически. Если 1, обнаружение будет выполнено с исходного порта 1900 (тот же, что и порт назначения). В противном случае в качестве порта будет использовано значение.

DiscoverMulticastIfСвойство
# DiscoverMulticastIf
C#
public string DiscoverMulticastIf { get; set; }

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

Методы17

AddDevicevoid
# AddDevice
C#
public void AddDevice(UpnpDevice device);

Добавляет указанное UpnpDevice в список обнаруженных устройств.

Параметры
ИмяТипПо умолчанию
deviceUpnpDevice—
AddPortMappingint
# AddPortMapping
C#
public int AddPortMapping(int port, int portInternal = 0, string desc = "", string proto = "UDP", int duration = 0);

Добавляет сопоставление для переадресации внешнего port (от 1 до 65535, хотя рекомендуется использовать порт 1024 или выше) на шлюзе по умолчанию (см. Upnp.GetGateway) на port_internal на локальной машине для указанного протокола proto (либо "TCP", либо "UDP", где UDP является значением по умолчанию). Если сопоставление портов для указанной комбинации порта и протокола уже существует на этом шлюзовом устройстве, этот метод пытается перезаписать его. Если это нежелательно, вы можете получить шлюз вручную с помощью Upnp.GetGateway и вызвать Upnp.AddPortMapping на нем, если таковой имеется. Обратите внимание, что переадресация известного порта (ниже 1024) с помощью UPnP может завершиться неудачей в зависимости от устройства. В зависимости от шлюзового устройства, если сопоставление для этого порта уже существует, оно либо будет обновлено, либо отклонит эту команду из-за этого конфликта, особенно если существующее сопоставление для этого порта не было создано через UPnP или указывает на другой сетевой адрес (или устройство), нежели этот. Если port_internal равен 0 (по умолчанию), то для внешнего и внутреннего порта используется один и тот же номер порта (значение port). Описание (desc) отображается в некоторых пользовательских интерфейсах управления маршрутизаторами и может использоваться для указания того, какое приложение добавило сопоставление. Аренда duration сопоставления может быть ограничена указанием продолжительности в секундах. Значение по умолчанию 0 означает отсутствие продолжительности, т. е. постоянную аренду, и, в частности, некоторые устройства поддерживают только эти постоянные аренды. Обратите внимание, что независимо от того, постоянная она или нет, это всего лишь запрос, и шлюз все равно может в любой момент решить удалить сопоставление (что обычно происходит при перезагрузке шлюза, при изменении его внешнего IP-адреса или на некоторых моделях, когда он обнаруживает, что сопоставление портов стало неактивным, т. е. не имело трафика в течение нескольких минут). Если не 0 (постоянно), допустимый диапазон согласно спецификации составляет от 120 (2 минуты) до 86400 секунд (24 часа). Возможные возвращаемые значения см. в Upnp.UpnpResult.

Параметры
ИмяТипПо умолчанию
portint—
portInternalint0
descstring""
protostring"UDP"
durationint0
Возвращает int
ClearDevicesvoid
# ClearDevices
C#
public void ClearDevices();

Очищает список обнаруженных устройств.

DeletePortMappingint
# DeletePortMapping
C#
public int DeletePortMapping(int port, string proto = "UDP");

Удаляет сопоставление портов для заданной комбинации порта и протокола на шлюзе по умолчанию (см. Upnp.GetGateway), если таковое существует. port должен быть допустимым портом от 1 до 65535, proto может быть либо "TCP" либо "UDP". Может быть отклонено для сопоставлений, указывающих на адреса, отличные от этого, для известных портов (ниже 1024) или для сопоставлений, не добавленных через UPnP. См. Upnp.UpnpResult для возможных возвращаемых значений.

Параметры
ИмяТипПо умолчанию
portint—
protostring"UDP"
Возвращает int
Discoverint
# Discover
C#
public int Discover(int timeout = 2000, int ttl = 2, string deviceFilter = "InternetGatewayDevice");

Обнаруживает локальные UpnpDevice. Очищает список ранее обнаруженных устройств. Фильтры для устройств типа IGD (InternetGatewayDevice) по умолчанию, так как они управляют переадресацией портов. timeout — это время ожидания ответов в миллисекундах. ttl — это время жизни; касайтесь этого, только если вы знаете, что делаете. См. Upnp.UpnpResult для возможных возвращаемых значений.

Параметры
ИмяТипПо умолчанию
timeoutint2000
ttlint2
deviceFilterstring"InternetGatewayDevice"
Возвращает int
GetDeviceUpnpDevice
# GetDevice
C#
public UpnpDevice GetDevice(int index);

Возвращает UpnpDevice по указанному index.

Параметры
ИмяТипПо умолчанию
indexint—
Возвращает UpnpDevice
GetDeviceCountint
# GetDeviceCount
C#
public int GetDeviceCount();

Возвращает количество обнаруженных UpnpDevice.

Возвращает int
GetDiscoverLocalPortint
# GetDiscoverLocalPort
C#
public int GetDiscoverLocalPort();
Возвращает int
GetDiscoverMulticastIfstring
# GetDiscoverMulticastIf
C#
public string GetDiscoverMulticastIf();
Возвращает string
GetGatewayUpnpDevice
# GetGateway
C#
public UpnpDevice GetGateway();

Возвращает шлюз по умолчанию. Это первый обнаруженный UpnpDevice, который также является допустимым IGD (InternetGatewayDevice).

Возвращает UpnpDevice
IsDiscoverIpv6bool
# IsDiscoverIpv6
C#
public bool IsDiscoverIpv6();
Возвращает bool
QueryExternalAddressstring
# QueryExternalAddress
C#
public string QueryExternalAddress();

Возвращает внешний IP адрес шлюза по умолчанию (см. Upnp.GetGateway) в виде строки. Возвращает пустую строку в случае ошибки.

Возвращает string
RemoveDevicevoid
# RemoveDevice
C#
public void RemoveDevice(int index);

Удаляет устройство с адресом index из списка обнаруженных устройств.

Параметры
ИмяТипПо умолчанию
indexint—
SetDevicevoid
# SetDevice
C#
public void SetDevice(int index, UpnpDevice device);

Устанавливает устройство с индексом index из списка обнаруженных устройств на device.

Параметры
ИмяТипПо умолчанию
indexint—
deviceUpnpDevice—
SetDiscoverIpv6void
# SetDiscoverIpv6
C#
public void SetDiscoverIpv6(bool ipv6);
Параметры
ИмяТипПо умолчанию
ipv6bool—
SetDiscoverLocalPortvoid
# SetDiscoverLocalPort
C#
public void SetDiscoverLocalPort(int port);
Параметры
ИмяТипПо умолчанию
portint—
SetDiscoverMulticastIfvoid
# SetDiscoverMulticastIf
C#
public void SetDiscoverMulticastIf(string mIf);
Параметры
ИмяТипПо умолчанию
mIfstring—

Upnp.UpnpResult

ЗначениеОписание
ActionFailed = 5

Действие не удалось.

ConflictWithOtherMapping = 13

Конфликт с существующим сопоставлением портов.

ConflictWithOtherMechanism = 12

Конфликт с другим механизмом. Может быть возвращено вместо Upnp.UpnpResult.ConflictWithOtherMapping, если сопоставление портов конфликтует с существующим.

ExtPortMustBeWildcard = 10

Значение внешнего порта должно быть подстановочным знаком.

ExtPortWildcardNotPermitted = 7

UpnpDevice не допускает использования подстановочных знаков для внешнего порта.

HttpError = 23

Ошибка HTTP.

InconsistentParameters = 3

Несоответствующие параметры.

IntPortWildcardNotPermitted = 8

UpnpDevice не допускает использования подстановочных знаков для внутреннего порта.

InvalidArgs = 20

Недопустимые аргументы.

InvalidDuration = 19

Неверная продолжительность.

InvalidGateway = 16

Неверный шлюз.

InvalidParam = 22

Недопустимый параметр.

InvalidPort = 17

Неверный порт.

InvalidProtocol = 18

Неверный протокол.

InvalidResponse = 21

Неверный ответ.

MemAllocError = 25

Ошибка выделения памяти.

NoDevices = 27

Нет доступных устройств. Возможно, сначала нужно вызвать Upnp.Discover, или discovery не обнаружил ни одного из допустимых UpnpDevice-ов.

NoGateway = 26

Нет доступного шлюза. Возможно, сначала нужно вызвать Upnp.Discover, или discovery не обнаружил ни одного допустимого IGD (InternetGatewayDevices).

NoPortMapsAvailable = 11

Карты портов недоступны. Также может быть возвращен, если функция сопоставления портов недоступна.

NoSuchEntryInArray = 4

Такой записи в массиве нет. Может быть возвращён, если заданная комбинация порта и протокола не найдена на UpnpDevice.

NotAuthorized = 1

Не авторизовано для использования команды на UpnpDevice. Может быть возвращено, если пользователь отключил UPNP на своем маршрутизаторе.

OnlyPermanentLeaseSupported = 15

Поддерживаются только постоянные аренды. Не используйте параметр duration при добавлении сопоставлений портов.

PortMappingNotFound = 2

Для указанного порта и комбинации протоколов на указанном UpnpDevice сопоставление портов не найдено.

RemoteHostMustBeWildcard = 9

Значение удаленного хоста должно быть подстановочным знаком.

SamePortValuesRequired = 14

Значения внешнего и внутреннего порта должны быть одинаковыми.

SocketError = 24

Ошибка сокета.

SrcIPWildcardNotPermitted = 6

UpnpDevice не допускает использования подстановочных знаков для исходного IP-адреса.

Success = 0

Команда UPNP или обнаружение прошли успешно.

UnknownError = 28

Неизвестная ошибка.

Документация Reckfell EngineНаверх ↑
БЫСТРЫЙ ПЕРЕХОДНачало работыEntity и иерархияC# & .NET 10Сцены и префабы
Руководства и полный API Reckfell K
reckfellENGINE
RECKFELL ACCOUNT

Вход в аккаунт

Войдите в аккаунт Reckfell.

Один аккаунт для всей платформы Reckfell.