c# - 如何进行端口转发?

标签 c# .net port nat forwarding

我正在尝试对我的项目进行端口转发,以替代当前的 udp 打洞。原因是我希望客户端在没有服务器干预的情况下开始相互通信。
在 .net 中,我们可以使用 natupnplib,但它似乎不能正常工作(例如,它不能在我家的 wifi 上工作)。 Mono.Nat 似乎也不是解决方案。

我知道有办法做到这一点,因为 uTorrent 会在我检查的每台电脑上进行端口映射。 (我知道它可能并非在所有地方都兼容,但我希望它能够在 uTorrent 工作的设备中工作)

我已经在互联网上查看了用于端口转发的开源 bittorents 实现,但还没有找到。
在 .net 环境中编写的解决方案会很棒。
那么,我该怎么做呢? :)

最佳答案

关于端口转发

您可以使用 UPNP 和/或 PMP(或其较新版本,PCP - 端口控制协议(protocol))在您的 .NET 项目中进行端口转发。目前,大多数可用设备都支持 UPNP,即使其中许多设备默认禁用。

常见问题

某些库无法在您的 wifi 中正常工作的原因有几个。首先,确保您在 NAT 设备中启用了 upnp。如果启用,那么您测试的库可能仅支持 IP 路由 (WANIPConnection),不支持 ADSL 调制解调器 (WANPPPConnection)。

Mono.Nat 和家庭设备

官方的 Mono.Nat 仅适用于不支持 WANIPConnection(IP 路由器)的设备,但是有很多设备(家庭设备)只允许 WANPPPConnection(ADSL 调制解调器 - 这可能是您的情况)。但是,您可以使用已经支持 WANPPPConnection 的更好的托管分支之一。

推荐

如果你使用 .NET 4.5,我推荐 Open.NAT (是的,它是由我开发的),它适用于家用设备,比 Mono.Nat 更快、更新。

祝你好运!

关于c# - 如何进行端口转发?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22861357/

相关文章:

c# - 是否可以在 Controller 中使用 UpdateModel 来填充对象?

c# - 使用 C# Parallel.ForEach 循环处理 SFTP 文件不处理下载

c++ - 不使用 bind() 和 port=0 的 C++ 空闲 TCP 端口列表

C# - 抛出异常但调用方方法已经完成的任务会发生什么情况?

.net - WPF 命令 - 如何在用户控件中使用

Apache 无法在 xampp 中运行

javascript - Node.js 未处理 'error' 事件

c# - 当存储库包含您最重要的代码时编写单元测试

c# - C# 中的线程上下文到底是什么?

c# - 以编程方式使用 Sandbox 的 azure CreateNotificationHub