嗨我有一个问题或问题。 我想提出两个Android手机之间的点到点的连接。 我每部手机连接到我的服务器,我得到他们的私人(192.168.1.1)和公共(76.123.288.22)IP,并与他们连接到服务器的端口一起。 我送一个应答当手机连接到服务器,打开服务器套接字在指定的端口。 我也送手机的其他开放式插座的公网IP和端口,但它不连接。 我已经在这里读多线程,这是不可能做到的P2P连接,如果这两款手机或电脑都落后两个不同的路由器。 我的问题是,如果这是真的,如果是怎样的LogMeIn或其它P2P应用不同的路由器后面工作吗? 它是一个编程错误或网络架构不允许它?
Answer 1:
有几种技术来实现这一点- STUN , TURN , ICE仅举几例。 你可以阅读有关他们每个人与软件如Skype的,每增加(现在谷歌谈2018年3月)等。其中使用这些技术。
但主要的概念,这是理解,
您需要IP是公共可到达的,这样就可以连接到它 。 如果它是一个专用网络上的路由器后面,那么你需要的端口转发的路由器上 ,即你需要一个规则添加到路由器转发接收到特定端口上的流量在路由器后面的服务器。 在一定程度上,上述技术实现这一隐式或通过涉及外部的第三方服务器。
您需要允许其在第一次连接到计算机上的传入连接 。 通常Windows或Linux防火墙阻塞所有传入连接,除非添加了异常。 这很可能需要为您的节点。
对于最后一部分,我不会在Android程序,所以真的不知道,如果它允许传入的连接等,添加规则,但我知道的是,每增加一个有一个客户端Android和GTALK使用XMPP其内部可以使用任何的技术我上面所指出的。 因此,没有理由相信它为什么不能为Android手机来完成。
添加一些有用的参考:
设的Libjingle (更新的链接2018年3月)由谷歌的开源库,其可以用来编写P2P应用包括文本,音频和视频。
这似乎都被编译为Android以及这里
Answer 2:
“我的问题是,如果这是真的,如果是怎样的LogMeIn或其它P2P应用不同的路由器之后的工作?”
这里的区别是,两台机器连接继续下去直通中央服务器 - 他们不直接相互连接(特殊情况除外)。
你想要做什么不工作,由设计。 如果TCP能做到这一点,那么任何人都可以连接到任何人。
你需要让你的中央服务器从一个电话传递流量对方手机已与服务器建立连接。
或者设置VPN,或者使用谷歌Chrome浏览器的手机(名字可能已经改变),这是对小的消息发送到手机,无论网络拓扑结构的一种手段。