Отказ: Я внимательно прочитал все похожие темы здесь и сделал поиск в Google. Никто из них не ответил на мои вопросы, поэтому я хотел бы накопить информацию в этой теме. Постскриптум Я, возможно, не так хорош на английском, сожалею об этом.
Я хочу создать приложение p2p (игра). Очевидно, что многие люди будут запускать эту программу на машине, которая является частью локальной сети с одной точкой доступа в Интернет (маршрутизатор) и приложение просто не будет работать без переадресации портов. Итак, я сделал исследование и выяснил, что могу выполнять автоматическую переадресацию портов с помощью UPnP. Микропрограммный код был написан для доступа к переадресации портов:
bool CPortController::Init() {
HRESULT result = CoInitialize(NULL); // Must be NULL
if (FAILED(result)) return false;
result = CoCreateInstance(__uuidof(UPnPNAT), NULL, CLSCTX_ALL, __uuidof(IUPnPNAT), (void **)&Nat);
if (FAILED(result) || !Nat) return false;
result = Nat->get_StaticPortMappingCollection(&Collection);
if (FAILED(result) || !Collection) return false; // Here I'm getting S_OK as result, but Collection is always == 0
return true;
}
Искал причину этого (см. комментарий в коде). Я нашел: 1. Старая система (нет, у меня есть Win7 с обновлениями) 2. Маршрутизатор может не иметь возможности UPnP или может быть не включен 3. Брандмауэр может блокировать TCP-порт 2869 или UDP-порт 1900, которые необходимы для UPnP
К сожалению, у меня нет доступа к маршрутизатору, чтобы проверить последние 2, но это не так важно, поскольку Skype и uTorrent (оба p2p) работают отлично. Мне нужно найти способ сделать тот же трюк и переадресовать порт автоматически с моим приложением, не попросив пользователя ничего сделать.
О библиотеках UPnP: Я нашел несколько библиотек UPnP (PlatinumUPnP, miniUPnP), но у них, похоже, столько кодов, ориентированных на поиск смарт-устройств и объединение их... uhm... Я не уверен, что мне нужно это, чтобы выполнить свою задачу и Я не могу найти фрагмент кода (который не использует эти WinUPnPAPI, перечисленные выше) для автоматической пересылки портов.
Теперь я немного потерялся. Может ли кто-нибудь показать мне направление продолжения исследований? Может быть, для этого есть что-то еще, чем UPnP? Может быть, есть lib (который я пропустил), чтобы использовать? Распространите немного света, пожалуйста. Заранее благодарю вас.