1

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

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

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

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

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

4

2 回答 2

0

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

如果事先不知道 IP 地址或有一些已知的服务器可以连接到询问,您就无法在 Internet 上创建 p2p IP 连接。即,一方必须主动向另一方查询的某种服务器注册它自己的服务器地址和端口号。

于 2012-09-12T06:04:38.750 回答
0

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

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

这基本上就是 BitTorrent 跟踪器的工作原理。但有一个限制 - 只有允许传入连接的对等方才会保留在列表中。这是有道理的,因为关于 NAT 背后的对等点的知识非常无用,因为无论如何您都无法访问它。您只能希望它会查询跟踪器并发现您。

现在,如果两个对等点位于 NAT 后面,它们就无法相互连接。至少在 P2P 协议不太复杂的情况下。BitTorrent 不允许这样做,而 Skype 会。它可以通过通过具有公共 IP 的设备之一或通过一些专用服务器流式传输数据来解决(后者可能更糟糕,因为可扩展性较差)。

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

于 2012-09-12T21:28:48.317 回答