繁体   English   中英

路由器后面的android套接字编程

[英]android socket programming behind a router

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

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

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

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

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

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

添加一些更有用的参考:

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

它似乎也已为 android 编译here

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM