无法在我的 C# 应用程序中添加静态端口映射

Posted

技术标签:

【中文标题】无法在我的 C# 应用程序中添加静态端口映射【英文标题】:Can't add a static port mapping in my c# application 【发布时间】:2013-01-29 04:14:19 【问题描述】:

我正在尝试在我的 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

【问题讨论】:

什么是mappings?你初始化了吗?把你的完整代码放在这里.. 发布更多代码是个好主意。例如,什么对象类型是映射。 @MuhamadSerawan 将您的代码粘贴到您的问题中。不作为评论.. 太棒了 - 没有使用指令或入口点! 【参考方案1】:

您需要将映射设置为新实例:

例如:

var mappings = new List<Mapping>();

然后你可以调用:

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

来自您的编辑:

upnpnat.StaticPortMappingCollection; // this is your problem.  

集合返回为空。因此,您不能添加到集合中。

您可能需要这样做:

NATUPNPLib.IStaticPortMappingCollection mappings = new StaticPortMappingCollection();

来自 Codesleuth 的评论:

我相信答案是他的路由器没有配置为 UPnP 网关,或者他没有权限。如果其中任何一种情况为真,则 StaticPortMappingCollection 为空。我建议您将其编辑到您的答案中,因为无论如何您都有正确的错误原因。首先检查null是处理错误的唯一方法

【讨论】:

实际上,他的代码似乎应该可以工作。 See this article @Codesleuth - 也许应该,但错误表明该集合没有实例。 我相信答案是他的路由器没有配置为 UPnP 网关,或者他没有权限。 StaticPortMappingCollectionnull 如果其中任何一种情况为真。我建议您将其编辑到您的答案中,因为无论如何您都有正确的错误原因。首先检查 null 是处理错误的唯一方法。 你不能这样使用它:NATUPNPLib.IStaticPortMappingCollection mappings = new StaticPortMappingCollection();。 IStaticPortMappingCollection 接口是抽象的【参考方案2】:

如果没有更多代码,我们将能够提供帮助,但如果异常出现在您提供的行中,则意味着 mappings 为 null 且未设置。

检查该行之前的代码,看看您是否真的在创建和设置 mappings 变量。

根据您的评论,upnpnat.StaticPortMappingCollection 返回的对象是 null。检查文档以确保您正确初始化它。

【讨论】:

【参考方案3】:

仅基于您的错误消息,这正是我们所拥有的;

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

编辑后,可能使用like;

NATUPNPLib.IStaticPortMappingCollection mappings = new StaticPortMappingCollection();

您好像忘记使用()

【讨论】:

这并没有解决问题。

以上是关于无法在我的 C# 应用程序中添加静态端口映射的主要内容,如果未能解决你的问题,请参考以下文章

外网如何访问内网SQL数据库

C# winform映射端口问题

交换机端口映射

配置好了IIS,并且路由做了端口映射 为何外网用户访问不到

无法使用自动映射器映射内部导航属性。 EF 核心

NAT静态端口映射