Can't add a static port mapping in my c# appli

2019-02-21 20:03发布

I'm trying to add new static port mapping in my c# application. Because my application runs as a server and i want its to listen on the port 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");

but it doesn't work!, The exception was the following :

Object reference not set to an instance of an object.

Does anyone can help me please?

This is what i'm doing : http://pietschsoft.com/post/2009/02/05/NET-Framework-Communicate-through-NAT-Router-via-UPnP.aspx

3条回答
▲ chillily
2楼-- · 2019-02-21 20:18

Without more code we would be able to help, but if the exception is on the line you provided, that means that mappings is null and not set.

Check the code before that line to see if you're actually creating and setting the mappings variable.

According to your comment, the object returned by upnpnat.StaticPortMappingCollection is what is null. Check the documentation to make sure you're initializing it correctly.

查看更多
在下西门庆
3楼-- · 2019-02-21 20:23

You need to set mappings to a new instance:

For example:

var mappings = new List<Mapping>();

Then you can call:

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

From your edit:

upnpnat.StaticPortMappingCollection; // this is your problem.  

The collection is coming back as null. Therefore you cannot add to the collection.

You may have to do:

NATUPNPLib.IStaticPortMappingCollection mappings = new StaticPortMappingCollection();

From Codesleuth's comment:

I believe the answer is that his router isn't configured as a UPnP gateway, or that he has no permissions. The StaticPortMappingCollection is null if either of those cases are true. I suggest you edit this into your answer as you've got the right reason for the error anyway. Checking for null first is the only way to deal with the error

查看更多
Viruses.
4楼-- · 2019-02-21 20:28

Just based on your error message which just all we have;

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

After your edit, maybe using like;

NATUPNPLib.IStaticPortMappingCollection mappings = new StaticPortMappingCollection();

Looks like you forget to use ()

查看更多
登录 后发表回答