2012-09-12 54 views
1

我正在学习C++(因为我现在正在安装Visual Studio,而且我手里拿着霍顿的书),我这样做的理由是我想写一个p2p类型的客户端/服务器程序,它允许用户无需端口转发即可从设备流式传输视频(并节省技术支持电话的时间)。开始使用p2p类型的网络/编程

我希望用户通过设备菜单向设备菜单注册设备(工程师将处理该问题),然后在PC上登录到客户端并将设备添加到谚语“好友列表”中设备使用他们在机器上使用的密码。然后,他们随时可以打开设备并通过网络控制它,而无需端口转发。我猜,Skype的工作方式有所不同。用户可以在不知道彼此的IP地址或转发任何端口的情况下将音频/视频流式传输给对方。

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

我一直在阅读有关p2p网络的知识,并且我理解p2p体系结构的基本概念,但不了解通过p2p进行通信的实际理论和方法。

+0

只是为了澄清,这不是我的第一个编程语言,但它是我的第一个编译语言。我一直在做很多PHP和VB编程。所以我不是从废品开始。 – Dexter

回答

0

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

如果不事先知道IP地址或者有一些已知的服务器连接到问题,则无法在互联网上创建p2p IP连接。即一方必须主动注册自己的服务器地址和端口号,并使用另一方查询的服务器方式。

+0

好吧,是的,我刚刚读了关于在纯p2p网络上引导的部分。也许最好做一个处理查询并连接客户端的中央服务器?如果是这种情况,客户端和设备如何在没有端口转发的情况下进行通信? – Dexter

+0

Dexter:中央服务器只需告知其中一个客户端的IP和侦听服务器端口号,然后该客户端就可以直接连接到另一个客户端。 –

0

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

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

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

现在,如果两个同伴在NAT后面,他们就无法互相访​​问。至少在P2P协议不太复杂的情况下。 BitTorrent不会允许这个,而Skype会。它可以通过使用公共IP或通过某个专用服务器(其中可能更差的可扩展性更差)的设备之一流式传输数据来解决。

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