【发布时间】:2011-01-19 13:38:44
【问题描述】:
我只想知道两个应用程序如何通过互联网相互交互。一个人如何向另一个人发送一些消息,因为当 IP 不固定时。请给我一些编码技巧,当 IP 未知时,p2p 应用程序通过互联网连接其他应用程序。
请帮我详细说明。
【问题讨论】:
-
互动是什么意思?您说“因为 IP 不固定,所以向其他人发送一些消息”,但是什么样的消息,为什么?你试过什么吗?帮助我们帮助你!
我只想知道两个应用程序如何通过互联网相互交互。一个人如何向另一个人发送一些消息,因为当 IP 不固定时。请给我一些编码技巧,当 IP 未知时,p2p 应用程序通过互联网连接其他应用程序。
请帮我详细说明。
【问题讨论】:
在尝试了解实现细节和编码技巧之前,您最好先了解一下 P2P 网络的一般工作原理、可能的架构等等(从 http://en.wikipedia.org/wiki/Peer-to-peer 开始)。您的问题太宽泛,无法“详细帮助您”。
编辑: 为了更快地进入,这可以很方便:.NET P2P: Writing Peer-to-Peer Networked Apps with the Microsoft .NET Framework
【讨论】:
WCF 中的对等通道 netPeerTcpBinding 的工作方式是它使用对等名称解析协议和简单服务发现协议的组合来发现对等网格上的对等点。
SSDP 在本地子网上工作以发现您可以直接连接的对等方。它通过传统的网络广播技术做到这一点。
另一方面,PNRP 使用 IPv6 跨网络和 Internet 工作。由于大多数网络尚不支持 IPv6,因此使用 Teredo 通过 IPv4 进行通信。
当 P2P 网格在全球云上发布时,网格名称将发送到 Microsoft 可公开访问/免费使用的 PNRP 种子服务器之一。当新的对等点上线时,他们首先向这些种子服务器询问部分对等点列表。然后使用此列表执行进一步的对等名称解析。
当在全球云上解析对等点时,通常会解析为 IPv6 地址。每当该对等方的地址发生变化时,此信息就会通过网格发送出去,以便其他对等方知道。
这本质上是一个分布式哈希表:http://en.wikipedia.org/wiki/Distributed_hash_table
当您在网格上发送数据时,此数据由对等通道路由到发送机器直接知道的对等点。然后,这些对等点中的每一个都路由到它们众所周知的对等点等。这一直持续到消息已发送到网格上的所有对等点。
感谢 Teredo 和 IPv6,这可以通过 Internet(甚至在防火墙/NAT 设备后面)工作。
【讨论】:
这通常会通过托管在已知位置的服务器上的某种目录来实现。
【讨论】:
正如 Spender 所指出的,如果不使用服务器作为中间人,您就无法做到这一点。如果您不知道朋友的地址,您是否希望能够拜访他们?
换句话说,打算建立 P2P 连接的两台机器中的每一台都将联系已知的服务器以交换连接信息。之后,理论上他们可以互相交谈。
但是,它们很可能在使用 NAT 的路由器后面,因此如果不打开路由器上的端口或采用某种技术绕过 NAT,就无法接收传入的数据包。
【讨论】: