1

我正在尝试创建一个程序来打开路由器端口,可能在 C# 中。我听说可以使用 opennat C# 库。我尝试使用此代码,但程序没有显示答案标志。

public Form1()
{
    InitializeComponent();
    OpenPort().Wait();
}
private static async Task OpenPort()
{
    var nat = new NatDiscoverer();
    var cts = new CancellationTokenSource(5000);
    var device = await nat.DiscoverDeviceAsync(PortMapper.Upnp, cts);

    await device.CreatePortMapAsync(new Mapping(Protocol.Tcp, 11000, 11000, 0, "port 11000"));
}
4

1 回答 1

0

这是 NatDiscovers 的示例,从这里使用https://csharp.hotexamples.com/en/examples/Open.Nat/NatDiscoverer/-/p ​​hp-natdiscoverer-class-examples.html

 public void OpenExternalPort(int privatePort, int publicPort, string description)
 {
     localHostPort = privatePort;
     var timeSpan = new TimeSpan(0, 0, 0, 30);
     var cancellationTokenSource = new CancellationTokenSource(timeSpan);
     natDiscoverer = new NatDiscoverer();
     natDevice = natDiscoverer
         .DiscoverDeviceAsync(PortMapper.Upnp, cancellationTokenSource)
         .IsCompleted();
     mapping = new Mapping(Protocol.Tcp, privatePort, publicPort, description);
     natDevice
         .CreatePortMapAsync(mapping)
         .IsCompleted();
 }

看起来像您的代码示例(但 new Mapping(Protocol.Tcp, privatePort, publicPort, description);不包含一个零,就像您的代码中一样)。

那么,你真的了解这个问题吗?也许您不需要端口映射?或者您在系统的其他部分(如防火墙)有问题?您如何理解您的代码不起作用?

于 2020-02-24T11:37:06.373 回答