我正在构建一个silverlight应用程序,并希望添加p2p功能 - 允许用户相互发送数据。
答案 0 :(得分:5)
关键问题实际上是打开客户端套接字以接受来自另一台机器的连接,而Silverlight不支持这一点,即使在浏览器外模式下,甚至在Silverlight 4中也是如此。如果你想做某事像这样,正如其他人提到的那样,你需要一个客户端可以连接的公共服务器,它将在客户端之间来回代理消息。当然,Silverlight套接字仅限于端口4502-4532这一事实也意味着您受到防火墙策略的限制。
我们对我们的应用程序(使用Silverlight 4)所做的是尝试连接Net.TCP的新支持(可以更好地扩展),然后如果失败,则回退到HttpDuplexBinding(运行时) HTTP因此更有可能通过防火墙)。然后,我们编写了一个WCF服务,该服务从一个客户端接收消息并将其提交给其他订阅客户端。它不是P2P,但它允许类似的结果(除了P2P连接的所有实际好处)。
如果你转向WPF,你放弃了Silverlight的可移植性,当然,你可以获得完整的服务器套接字支持,以及编码各种NAT traversal strategies STUN和{{{ 3}}
答案 1 :(得分:3)
我认为您无法在无服务器环境的Silverlight中实现此功能。
你可以做任何你想要做的服务器和网络服务,虽然这在技术上不再是点对点应用程序。您必须将消息发送到服务器,然后服务器将发送到相应的客户端。如果您遵循此路线,您可能还需要查看WCF RIA Services的Silverlight,因为它内置了对身份验证等内容的支持。
编辑 - 我不知道这是否是一个选项,但看起来有人想出了一种在Silverlight中进行P2P的方法。但是,它要求您在Windows Live Messenger中运行应用程序: