免責事項: 私はここですべての同様のトピックを注意深く読み、グーグル検索を行いました。いずれも私の質問に答えてくれなかったので、このトピックに情報を蓄積したいと思います。PS英語が苦手かもしれませんが、ごめんなさい。
p2pアプリケーション(ゲーム)を作りたいです。明らかに、多くの人が1つのインターネットアクセスポイント(ルーター)を備えたローカルネットワークの一部であるマシンでこのプログラムを実行し、アプリはポートフォワーディングなしでは機能しません。そこで、調査を行ったところ、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.ファイアウォールがブロックされている可能性がありますどちらもUPnPに必要なTCPポート2869またはUDPポート1900
残念ながら、最後の2つをチェックするためのルーターにアクセスできませんが、SkypeとuTorrent(両方ともp2p)が完全に機能するため、それほど重要ではありません。ユーザーに何もするように依頼することなく、アプリで同じトリックを実行してポートを自動的に転送する方法を見つける必要があります。
UPnPライブラリについて: UPnPライブラリ(PlatinumUPnP、miniUPnP)はほとんど見つかりませんでしたが、スマートデバイスを見つけてまとめることを目的としたコードがたくさんあるようです...うーん...これが必要かどうかはわかりませんタスクを完了すると、自動ポート転送用のコード(上記のWinUPnPAPIを使用していない)が見つかりません。
私は今少し迷っています。誰かが私に研究を続ける方向を教えてもらえますか?多分それのためにUPnP以外の何かがありますか?多分使用するlib(私が逃した)がありますか?光を広げてください。前もって感謝します。