2013-02-13 6 views
7

Ich versuche, neue statische Port-Zuordnung in meiner C# -Anwendung hinzuzufügen. Da meine Anwendung als Server läuft und ich seine auf dem Port hören möchten 8000.Konnte keine statische Port-Zuordnung in meiner C# -Anwendung hinzufügen

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

aber es funktioniert nicht !, Die Ausnahme war die folgende:

Objektverweis nicht auf eine Instanz eines Objekts.

Kann mir bitte jemand helfen?

Das ist, was ich tue: http://pietschsoft.com/post/2009/02/05/NET-Framework-Communicate-through-NAT-Router-via-UPnP.aspx

+0

Was zu verwenden vergessen wird 'mappings'? Hast du es initialisiert? Setzen Sie Ihren vollständigen Code hier. –

+0

Wäre eine gute Idee, mehr Code zu posten. Welcher Objekttyp ist zum Beispiel Zuordnungen. –

+0

@MuhamadSerawan Fügen Sie Ihren Code in Ihre Frage ein. Nicht als Kommentar. –

Antwort

3

Sie müssen Zuordnungen auf eine neue Instanz setzen:

Zum Beispiel:

var mappings = new List<Mapping>(); 

Dann können Sie anrufen:

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

Von Ihrer Eingabe:

upnpnat.StaticPortMappingCollection; // this is your problem. 

Die Sammlung kommt als null zurück. Daher können Sie der Sammlung nicht hinzufügen.

können Sie zu tun haben:

NATUPNPLib.IStaticPortMappingCollection mappings = new StaticPortMappingCollection(); 

Von Codesleuth Kommentar:

Ich glaube, die Antwort ist, dass seine Router nicht als UPnP-Gateway konfiguriert ist, oder dass er Keine Berechtigungen Die StaticPortMappingCollection ist null, wenn einer dieser Fälle wahr ist. Ich schlage vor, Sie bearbeiten dies in Ihrer Antwort, da Sie sowieso den richtigen Grund für den Fehler haben. zuerst für null Überprüfung ist der einzige Weg, mit dem Fehler zu behandeln

+0

@Muhammed - check my edit –

+0

Eigentlich scheint es, dass sein Code funktionieren sollte. [Siehe diesen Artikel] (http://www.codeproject.com/Articles/110338/UpnpStat-List-and-Modify-Port-Mappings-on-your-UPn) – Codesleuth

+0

@Codesleuth - es sollte vielleicht, aber der Fehler zeigt das an Die Sammlung hat keine Instanz. –

1

Ohne mehr Code würde helfen wir in der Lage zu sein, aber wenn die Ausnahme auf der Linie ist Ihnen zur Verfügung gestellten, das bedeutet, dass mappings ist null und nicht festgelegt.

Überprüfen Sie den Code vor dieser Zeile, um zu sehen, ob Sie tatsächlich die Variable mappings erstellen und einstellen.

Entsprechend Ihrem Kommentar ist das Objekt, das von upnpnat.StaticPortMappingCollection zurückgegeben wird, was null ist. Überprüfen Sie die Dokumentation, um sicherzustellen, dass Sie sie korrekt initialisieren.

1

Nur basierend auf Ihrer Fehlermeldung die nur alle wir haben;

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

Nach Ihrer Bearbeitung, vielleicht mit like;

NATUPNPLib.IStaticPortMappingCollection mappings = new StaticPortMappingCollection(); 

Sieht aus wie Sie ()

+0

Das behebt das Problem nicht. – Matth3w