开始使用p2p类型的网络/编程 我正在学习C++,我现在安装VisualStudio,我手里拿着Horton的书,我这样做的原因是我想写一个P2P类型的客户机/服务器程序,它允许用户在不需要端口转发的情况下从设备中流出视频,并节省时间在技术支持调用上。

开始使用p2p类型的网络/编程 我正在学习C++,我现在安装VisualStudio,我手里拿着Horton的书,我这样做的原因是我想写一个P2P类型的客户机/服务器程序,它允许用户在不需要端口转发的情况下从设备中流出视频,并节省时间在技术支持调用上。,c++,networking,p2p,C++,Networking,P2p,我希望用户通过设备菜单向家庭服务器注册设备。工程师会处理这些问题,然后在PC上登录到客户机,并使用他们在机器上使用的密码将设备添加到设备的好友列表中。然后,他们可以在任何时候打开设备并通过web控制它,而无需端口转发 我想,Skype就是这样工作的。用户可以在不知道彼此的IP地址或转发任何端口的情况下相互传输音频/视频 有人能给我一个如何工作的概述,以及在编程主服务器和客户端时需要考虑的网络因素吗?我甚至不知道从哪里开始。。。我不需要编程方面的帮助,只需要通信基础设施的外观。客户端如何在不知道I

我希望用户通过设备菜单向家庭服务器注册设备。工程师会处理这些问题,然后在PC上登录到客户机,并使用他们在机器上使用的密码将设备添加到设备的好友列表中。然后,他们可以在任何时候打开设备并通过web控制它,而无需端口转发

我想,Skype就是这样工作的。用户可以在不知道彼此的IP地址或转发任何端口的情况下相互传输音频/视频

有人能给我一个如何工作的概述,以及在编程主服务器和客户端时需要考虑的网络因素吗?我甚至不知道从哪里开始。。。我不需要编程方面的帮助,只需要通信基础设施的外观。客户端如何在不知道IP地址的情况下在p2p网络上发现一个设备,然后与之通信,或者没有任何端口供进入远程网络的信息或命令路由到该设备

我一直在阅读p2p网络,我了解p2p架构的基本思想,但不了解通过p2p进行通信的实际理论和方法

客户端如何在不知道IP地址的情况下在p2p网络上发现一个设备,然后与之通信,或者没有任何端口供进入远程网络的信息或命令路由到该设备


如果事先不知道IP地址,或者没有连接到某个已知的服务器,就无法在internet上创建p2p IP连接。也就是说,一方必须主动向另一方查询的某种方式的服务器注册自己的服务器地址和端口号。

如果您的设备仅限于在单个网络中工作,您可以使用来避免通过服务器进行通信。查找网络中的所有设备或服务可能是一个不错的选择

如果你想让这些设备在互联网上工作,你会让你的生活更艰难。让我们假设您的网络将很小,因此您希望每个设备都相互了解,这样您就可以将视频从每个设备传输到每个设备。您可以考虑一个集中的组件,它跟踪所有设备,并愿意与其他人共享此信息。它可能是一个简单的http服务器,您可以查询所有其他设备的地址。每次查询都会自动注册一个查询设备,所有其他设备都可以在重新查询服务器后发现它

这就是BitTorrent tracker的基本工作原理。但有一个限制–列表中只保留允许传入连接的对等方。这是有道理的,因为NAT背后的一个对等方的知识是非常无用的,因为你无论如何都无法接触到它。你只能希望它能查询追踪者并发现你

现在,如果两个对等方在NAT后面,他们就无法联系到对方。至少在P2P协议不太复杂的情况下。BitTorrent不会允许这种情况,而Skype会。它可以通过使用公共IP的一个设备或通过某个专用服务器来流式传输数据来解决,后者可能更糟糕,因为可扩展性较差


我现在就停下来。。。在互联网上设计这样的协议有很多问题,这取决于你到底需要什么。那么,您需要它在Internet上工作还是仅在本地网络中工作?如果您能提供更多详细信息,我很高兴能对其进行更深入的讨论。

只是澄清一下,这不是我的第一种编程语言,但它是我的第一种编译语言。我一直在做很多PHP和VB编程。所以我不是从废品开始的。好吧,是的,我只是读了关于在纯p2p网络上引导的部分。也许最好使用一个集中式服务器来处理查询并连接客户端?如果是这样的话,客户端和设备如何在没有端口转发的情况下通信?Dexter:中央服务器只需要告诉其中一个客户端另一个的IP和侦听服务器端口号,然后该客户端就可以直接连接到另一个客户端。