我一直在www上阅读,但无法了解P2P的最重要基础。
该图是这样的:
[peer1]<-->[dsl-router1]<-->[central server]<-->[dsl-router2]<-->[peer2]
我正在中央服务器上开发聊天软件。聊天消息现在已经很好地通过中央服务器传输了,但是,我需要使用p2p文件共享功能,因为服务器的带宽(电缆带宽,不是传输限制)仅用于传输聊天消息。
问题是,我的中央服务器上的软件知道router1和router2的IP和端口,但不知道peer1和peer2,因为这些对等点位于路由器后面并且没有IP地址。
如何在不使这些数据通过中央服务器的情况下实际将数据从对等方1传输到对等方2,反之亦然?
(最坏的情况是对等体和dsl路由器之间有一个无线路由器)
最佳答案
有两种基本的方法可以做到这一点。新方法是使用IGDP(通过uPnP打开端口)。在这里对此进行了很好的描述:
http://www.codeproject.com/Articles/13285/Using-UPnP-for-Programmatic-Port-Forwardings-and-N
如果两个节点都没有支持uPnP的路由器,则另一种选择是TCP打孔,这不是完美的方法,但实际上效果很好。此处描述:
http://www.brynosaurus.com/pub/net/p2pnat/
关于c++ - P2P最重要的基础,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12194820/