7

C# アプリケーションに新しい静的ポート マッピングを追加しようとしています。私のアプリケーションはサーバーとして実行され、ポート 8000 でリッスンする必要があるためです。

NATUPNPLib.UPnPNATClass upnpnat = new NATUPNPLib.UPnPNATClass();
NATUPNPLib.IStaticPortMappingCollection mappings = upnpnat.StaticPortMappingCollection;
mappings.Add(8000, "TCP", 8000, "192.168.1.100", true, "Local Web Server");

しかし、それは機能しません!, 例外は次のとおりです:

オブジェクト参照がオブジェクト インスタンスに設定されていません。

誰でも私を助けてくれますか?

これは私がやっていることです: http://pietschsoft.com/post/2009/02/05/NET-Framework-Communicate-through-NAT-Router-via-UPnP.aspx

4

3 に答える 3

3

新しいインスタンスへのマッピングを設定する必要があります。

例えば:

var mappings = new List<Mapping>();

次に、次のように呼び出すことができます。

mappings.Add(8000, "TCP", 8000, "192.168.1.100", true, "Local Web Server");

あなたの編集から:

upnpnat.StaticPortMappingCollection; // this is your problem.  

コレクションは null として返されます。したがって、コレクションに追加することはできません。

あなたがしなければならないかもしれません:

NATUPNPLib.IStaticPortMappingCollection mappings = new StaticPortMappingCollection();

Codesleuth のコメントから:

答えは、彼のルーターが UPnP ゲートウェイとして構成されていないか、権限がないことだと思います。これらのケースのいずれかが true の場合、StaticPortMappingCollection は null です。とにかくエラーの正しい理由があるので、これを回答に編集することをお勧めします。最初に null をチェックすることがエラーに対処する唯一の方法です

于 2013-02-13T15:09:28.433 に答える
1

これ以上のコードがなくても解決できますが、指定した行に例外がある場合、それmappingsは null であり、設定されていないことを意味します。

その行の前のコードをチェックして、実際にmappings変数を作成および設定しているかどうかを確認してください。

あなたのコメントによると、返されるオブジェクトupnpnat.StaticPortMappingCollectionは null です。ドキュメントをチェックして、正しく初期化していることを確認してください。

于 2013-02-13T15:09:37.570 に答える
1

私たちが持っているすべてのエラーメッセージに基づいています。

var mappings = new List<Mapping>();
mappings.Add(8000, "TCP", 8000, "192.168.1.100", true, "Local Web Server");

編集後、おそらく like; を使用します。

NATUPNPLib.IStaticPortMappingCollection mappings = new StaticPortMappingCollection();

使い方を忘れているようです()

于 2013-02-13T15:11:02.783 に答える