我需要在C#編寫的桌面應用程序進行端口轉發端口映射在C#不工作
我用這個代碼:
using System;
using System.Threading;
using NATUPNPLib;
namespace iSpyApplication
{
public static class NATControl
{
public static UPnPNAT NAT = new UPnPNAT();
private static IStaticPortMappingCollection _mappings;
public static IStaticPortMappingCollection Mappings
{
get
{
if (_mappings==null)
{
try
{
if (NAT.NATEventManager != null)
_mappings = NAT.StaticPortMappingCollection;
}
catch
{
}
}
return _mappings;
}
}
public static bool SetPorts(int wanPort, int lanPort)
{
bool b = false;
int i = 3;
while (Mappings == null && i > 0)
{
Thread.Sleep(2000);
i--;
}
if (Mappings != null)
{
try
{
Mappings.Remove(wanPort, "TCP");
}
catch (Exception ex)
{
// do something
}
try
{
Mappings.Add(wanPort, "TCP", lanPort, internalIP, true, "iSpy");
b = true;
}
catch (Exception ex)
{
// do something
}
}
return b;
} // method
} // class
} // namespace
UPnP是在我的Linksys路由器啓用
代碼正在運行,並沒有給出任何錯誤或異常,但映射根本就沒有發生。
這裏是如何我測試它:
- 我有聽內部端口例如應用程序8080
我手動的映射條目添加到我的路由器:
應用:HTTP,外部端口8080,內部端口8080,協議:TCP,內部IP,啓用
我請求如下的URL在我的瀏覽器中: http:// publicIP:externalport/
- 應用程序在內部端口上收到一個套接字並回復一條消息。
我刪除映射條目,並嘗試添加它編程
- 相同
- 我運行執行映射
- 相同
瀏覽器顯示跟隨着消息的代碼:
無法連接
火狐不能 publicIP建立與服務器的連接:externalPort
我搜索的結果進行映射的C#代碼,他們看起來都一樣。 爲什麼映射失敗? 在此先感謝
你能確認你的測試方法的工作?例如,創建一個手動portforwarding和測試端口 – DarkSquirrel42
這就是我第一次做的。手動映射工作正常。 – Nina