开始使用p2p类型的网络/编程

时间:2012-09-12 05:56:55

标签: c++ networking p2p

我正在学习C ++(就像我现在正在安装Visual Studio,我手里拿着Horton的书),我这样做的原因是我想编写一个p2p类型的客户端/服务器程序,将允许用户从设备流式传输视频而无需端口转发(并节省技术支持呼叫的大量时间)。

我希望用户通过设备菜单向家庭服务器注册设备(工程师将负责),然后在PC上登录客户端并将设备添加到设备的众所周知的“好友列表”中使用他们在机器上使用的密码。然后,他们可以随时打开设备并通过网络控制它,而无需端口转发。

我认为Skype的工作方式有多种。用户可以互相传输音频/视频,而无需了解彼此的IP地址或转发任何端口。

有人可以概述一下这将如何运作,以及在编写主服务器和客户端时我需要考虑的网络注意事项吗?我甚至不知道从哪里开始......我不需要编程方面的帮助,只需要通信基础设施的外观。客户端如何在p2p网络上发现设备然后与之通信,而无需事先知道IP地址,或者没有任何端口可以将进入远程网络的信息或命令路由到设备?

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

2 个答案:

答案 0 :(得分:0)

  

客户端如何在p2p网络上发现设备然后与之通信,而不需要事先知道IP地址,或者没有任何端口可以将进入远程网络的信息或命令路由到设备?

如果没有预先知道IP地址或者有一些已知的连接要求的服务器,则无法在Internet上创建p2p IP连接。即一方必须主动注册自己的服务器地址和端口号,以及另一方查询的某种服务器。

答案 1 :(得分:0)

如果您的设备仅限于在单个网络中工作,则可以使用zero configuration networking来避免通过服务器进行通信。 Multicast DNS可能是发现网络中所有设备或服务的不错选择。

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

这基本上是BitTorrent跟踪器的工作原理。虽然有一个限制 - 只有允许传入连接的对等体被保留在列表中。这是有道理的,因为关于NAT背后的同伴的知识是非常无用的,因为无论如何你无法达到它。您只能希望它会查询跟踪器并发现您。

现在,如果两个对手在NAT后面,他们就无法相互联系。至少在P2P协议不太复杂的情况下。 Skype会支持BitTorrent。它可以通过其中一个设备使用公共IP或某些专用服务器(后者可能更糟,可扩展性更差)来解决。

我现在就停止......在互联网上设计这样的协议存在很多问题,这取决于你需要的完全。那么,您是需要它在Internet上工作还是仅在本地网络中工作?如果您提供更多详细信息,我很乐意更深入地讨论它。