8

我有一个问题或问题。我正在尝试在两部安卓手机之间建立 p2p 连接。我让每部电话都连接到我的服务器,并获得了它们的私有 (192.168.1.1) 和公共 (76.123.288.22) IP 以及它们连接到我的服务器的端口。当电话连接到服务器以打开具有特定端口的服务器套接字时,我会发送响应。我还向另一部手机发送了开放套接字的公共 IP 和端口,但它没有连接。我在这里阅读了多个线程,如果手机或计算机都位于两个不同的路由器后面,则无法进行 p2p 连接。我的问题是,如果这是真的,那么 LogMeIn 或其他 p2p 应用程序如何在不同的路由器后面工作?是编程错误还是网络架构不允许?

4

2 回答 2

6

有几种技术可以实现这一点——STUNTURNICE等等。您可以阅读它们中的每一个,并且诸如 skype、gtalk(现为 google talk 2018 年 3 月)等软件使用这些技术。

但这里要理解的主要概念是,

  1. 您需要一个可公开访问的 ip,以便您可以连接到它。如果它位于专用网络上的路由器后面,那么您需要在路由器上进行端口转发,即您需要向该路由器添加一条规则,以将在特定端口上接收到的流量转发到路由器后面的服务器。在一定程度上,上述技术隐含地或通过涉及外部 3rd 方服务器来实现这一点。

  2. 您需要在最初连接的机器上允许传入连接。通常 windows 或 linux 防火墙会阻止所有传入连接,除非添加了例外。您的两个节点可能都需要这样做。

对于最后一部分,我不在android上编程,所以我不确定它是否允许为传入连接添加规则等。但我知道gtalk有一个android客户端,gtalk使用XMPP,它在内部可以使用任何技术我在上面指出。所以没有理由相信为什么它不能用于安卓手机。

添加一些更有用的参考:

libjingle(2018 年 3 月更新了链接)是 google 的一个开源库,可用于编写 p2p 应用程序,包括文本、音频和视频。

它似乎也在这里为 android 编译

于 2012-11-11T19:33:10.103 回答
0

“我的问题是,如果这是真的,那么 LogMeIn 或其他 p2p 应用程序如何在不同的路由器后面工作?”

这里的区别在于,两台机器的连接都通过中央服务器进行——它们不直接相互连接(特殊情况除外)。

根据设计,您想做的事情不起作用。如果 TCP 可以做到这一点,那么任何人都可以连接到任何人。

您需要让中央服务器将流量从一部手机传递到另一部手机与服务器建立的连接。

或者设置一个 VPN,或者使用谷歌浏览器来打电话(名称可能已经改变),这是一种向手机发送小消息的方法,无论网络拓扑如何。

于 2012-11-11T19:36:05.490 回答