有没有适用于.NET(C#或VB.NET)的UPnP库?

42

我正在开发一款P2P应用程序,并需要使用UPnP通过NAT路由器/防火墙进行通信。然而,.NET Framework似乎不支持UPnP。

是否有适用于.NET的UPnP库?C#或VB.NET?

更新:我已经找到了NATUPnP 1.0类型库(NATUPNP.DLL)COM组件,它是Windows的一部分(自Windows XP以来),允许您轻松设置/维护使用UPnP的端口转发。

我在这里编写了一篇带有代码示例的文章: .NET Framework:通过UPnP(通用即插即用)通过NAT路由器进行通信


2
嘿,感谢您提供详尽的文章和项目。我正在尝试使用它,在32位Win7系统上运行得非常出色 - 但是在64位Win7系统上,UPnPNATHelper.StaticPortMappings 总是为NULL。您对此有任何见解吗? - saurabhj
Chris的帖子中的链接已经失效了。这是一个新链接:https://pietschsoft.com/post/2009/02/05/net-framework-communicate-through-nat-router-via-upnp - John Dyer
9个回答

25

我已经编写了一个完全托管的UPnP库,基于Microsoft UPnP控制点COM对象实现,提供具有完整源代码和演示项目的库。你可以在GitHub存储库中下载:

https://github.com/jogibear9988/ManagedUPnP

它支持使用对象层次结构完全遍历UPnP描述文档,除其他功能外,非常易于使用。


2
这看起来非常有前途,我会在我的项目中试一试。 - jishi
很好,但底层对象似乎有问题。设备查找器从未发送发现数据包。 - Garr Godfrey
1
@Aaron Murgatroyd,你的链接已经失效了。 这里有一个 GitHub 分支: https://github.com/jogibear9988/ManagedUPnP - John Dyer
1
@JohnDyer,谢谢您,链接已更新。 - Aaron Murgatroyd

21

有一个足够容易访问的COM库:

UPnP API 的目的

UPnP™ 框架实现了智能家电、无线设备和个人计算机之间的动态网络。有两个API用于处理UPnP认证设备:

控制点API 是一组COM接口,用于查找和控制设备。 设备主机API由一组COM接口组成,用于实现由计算机托管的设备。


7
我在这里写了一篇文章,其中包含代码示例:.NET Framework: 通过UPnP(通用即插即用)与NAT路由器通信 - http://pietschsoft.com/post.aspx?id=31200e6d-4b61-48b8-a9cb-91e3dd8e97f3 - Chris Pietschmann
1
@ChrisPietschmann的链接在2012年9月14日已失效。 - Urda
1
@Urda,链接又可以使用了。Wayback Machine链接:http://web.archive.org/web/20130813184633/http://pietschsoft.com/post/2009/02/05/NET-Framework-Communicate-through-NAT-Router-via-UPnP - M. Mimpen

8

5
这个Intel UPnP工具已经以开源工具的形式重新发布在http://opentools.homeip.net。新工具被称为“UPnP技术开发者工具”。它们是用C#构建的,但有一个免费的代码生成器可以输出C和C#堆栈。C堆栈将在Windows和Linux上运行。

1
@user230486 Yilan,你真的需要将这些东西转换成COM .dll或.ocx,这样使用VB6或Delphi(或任何其他非.NET Win32设计师)的人就可以使用你所做的所有工作。当前的upnp.dll是一个可怕的控件,我不希望我的最坏的敌人不得不使用它,请至少创建一个Com Wrapper。 - Erx_VB.NExT.Coder

5

3

如果有人需要一个易用的库,我写了一个使用UPnPLib COM组件的c#类库。它具有一些基本功能来打开和关闭端口。我还没有在多个平台上测试过它,但它可以在Windows 7的Visual Studio 2010上工作。请随意在http://sourceforge.net/projects/easyupnp/下载。


https://github.com/meehi/EasyUPnP - g.breeze

3
专门针对NAT,有Mono.Nat库。

3

3

英特尔的UPNP工具曾经可以在C#中导出UPnP客户端。这个套件已经过时,但仍然应该可以使用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接