2013-02-13 63 views
7

我試圖在我的c#應用程序中添加新的靜態端口映射。因爲我的應用程序運行的服務器,我想它的監聽端口8000無法在我的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"); 

上,但它不工作!唯一的例外是以下幾點:

對象引用未設置爲一個對象的實例。

有人能幫助我嗎?

這是我在做什麼:http://pietschsoft.com/post/2009/02/05/NET-Framework-Communicate-through-NAT-Router-via-UPnP.aspx

+0

什麼是'mappings'?你初始化了它嗎?這裏寫您的完整代碼.. – 2013-02-13 15:09:28

+0

將發佈更多的代碼是一個好主意。例如,什麼對象類型是映射。 – 2013-02-13 15:09:41

+0

@MuhamadSerawan在你的問題中粘貼你的代碼。不作爲評論.. – 2013-02-13 15:10:17

回答

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。我建議你編輯這個到你的答案,因爲你有錯誤的正確理由。檢查空第一是處理錯誤

+0

@Muhammed - 檢查我的編輯 – 2013-02-13 15:14:53

+0

事實上,似乎他的代碼應該工作。 [請參閱本文](http://www.codeproject.com/Articles/110338/UpnpStat-List-and-Modify-Port-Mappings-on-your-UPn) – Codesleuth 2013-02-13 15:20:37

+0

@Codesleuth - 它也許應該,但在錯誤指示該集合沒有實例。 – 2013-02-13 15:22:00

1

如果沒有更多的代碼,我們將能夠幫助的唯一途徑,但如果異常是您提供的線,這意味着mappings爲空,而不是設置。

檢查該行前的代碼,看看是否實際創建並設置mappings變量。

根據您的評論,upnpnat.StaticPortMappingCollection返回的對象是null。檢查文檔以確保正確初始化它。

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(); 

看起來你忘了使用()

+0

這並沒有解決問題。 – Matth3w 2016-09-28 22:25:56

相關問題