1

我想更好地了解网络可以做什么,我目前正在开发一些 Android 应用程序,我想以某种方式通过 WiFi 和/或 3G/4G 实现某种 P2P 连接。我知道这样做会遇到很多困难,但我仍然想知道如何开始解决这个问题,或者有一个方向。

我对此有一个想法,我认为如果它有效,我可以避免 NAT 遍历的所有麻烦(我绝对不会假装我是第一个提出这个想法的人):

握手然后传输自己的套接字

Jim 和 John 都连接到服务器。服务器将它们放在同一个盒子中,并相互转发彼此的消息。在某些时候,服务器厌倦了浪费他的带宽。他有一个连接到 Jim 的插座,还有一个连接到 John 的插座。所以“不知何故”(也许是神奇地),他把他的 to-John-Socket 给了 Jim,反之亦然。

因此新的场景:Jim 过来说“嘿服务器,给 John 一个套接字”: 服务器:好的,等他来。约翰:嘿服务器,给吉姆一个插座。服务员:哦,你来了!吉姆,拿走约翰的插座。约翰,拿走吉姆的插座。见你们!

服务器回到他的小生意,而吉姆和约翰做他们自己的事情。

我想肯定没有这么简单。那么我该怎么做呢?如果我需要在某个时候遍历 NAT 网关,我该怎么做(我自己,没有库)?

4

1 回答 1

0

我认为你的尝试是可以实现的,但如果你从零开始,肯定会很困难而且很耗时。我不是网络编程方面的专家,但我知道足以理解会遇到的复杂情况。

如果您想了解一些有关网络编程的背景信息,那么即使您不熟悉 UNIX,我也会推荐这本书Unix Network Programming 。尽管它是非常技术性和详细的 C 代码,但它为套接字等提供了非常好的背景知识,因为它是从 UNIX 中提出套接字的想法的。

如果我正在做类似的事情,那么我会很想尝试查看一些开源项目,例如此处列出的,甚至Yahoo Messenger SDK。谷歌搜索“开源 p2p”也可能会给出一些指示,尽管我想其中很多是在 C/C++ 中。

于 2012-06-28T11:30:15.830 回答