2013-02-13 12 views
7

Sto tentando di aggiungere una nuova mappatura delle porte statiche nella mia applicazione C#. Perché la mia applicazione viene eseguita come un server e voglio la sua per ascoltare sulla porta 8000.Impossibile aggiungere una mappatura delle porte statiche nella mia applicazione C#

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

ma non funziona !, L'eccezione è stata la seguente:

riferimento oggetto non impostato su un'istanza di un oggetto.

Qualcuno può aiutarmi per favore?

questo è quello che sto facendo: http://pietschsoft.com/post/2009/02/05/NET-Framework-Communicate-through-NAT-Router-via-UPnP.aspx

+0

Cos'è 'mappings'? L'hai inizializzato? Metti qui il tuo codice completo .. –

+0

Sarebbe una buona idea pubblicare più codice. Ad esempio, quale tipo di oggetto è il mapping. –

+0

@MuhamadSerawan Incolla il tuo codice nella tua domanda. Non come un commento .. –

risposta

3

È necessario impostare le mappature a una nuova istanza:

Ad esempio:

var mappings = new List<Mapping>(); 

quindi è possibile chiamare:

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

Dalla modifica:

upnpnat.StaticPortMappingCollection; // this is your problem. 

La raccolta è di nuovo nulla. Pertanto non è possibile aggiungere alla raccolta.

Potrebbe essere necessario fare:

NATUPNPLib.IStaticPortMappingCollection mappings = new StaticPortMappingCollection(); 

Dal commento di Codesleuth:

Credo che la risposta è che il suo router non è configurato come un gateway UPnP, o che ha nessun permesso. StaticPortMappingCollection è null se uno di questi casi è true. Ti suggerisco di modificare questo nella tua risposta in quanto hai comunque la ragione giusta per l'errore. Controllando per nulla prima è l'unico modo per affrontare l'errore

+0

@Muhammed - controlla la mia modifica –

+0

In realtà, sembra che il suo codice dovrebbe funzionare. [Vedere questo articolo] (http://www.codeproject.com/Articles/110338/UpnpStat-List-and-Modify-Port-Mappings-on-your-UPn) – Codesleuth

+0

@Codesleuth - forse dovrebbe ma l'errore indica che la raccolta non ha istanza. –

1

Senza più codice saremmo in grado di aiutare, ma se l'eccezione è sulla linea che hai fornito, il che significa che mappings è nullo e non impostato.

Controllare il codice prima di quella linea per verificare se si sta effettivamente creando e impostando la variabile mappings.

In base al tuo commento, l'oggetto restituito da upnpnat.StaticPortMappingCollection è ciò che è null. Controlla la documentazione per assicurarti di inizializzarla correttamente.

1

Basandosi semplicemente sul proprio messaggio di errore , tutto ciò che abbiamo;

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

Dopo la modifica, è possibile utilizzare come;

NATUPNPLib.IStaticPortMappingCollection mappings = new StaticPortMappingCollection(); 

Sembra che si dimentica di usare ()

+0

che non ha risolto il problema. – Matth3w