【问题标题】:Direct TCP/IP networking between two android devices over internet通过互联网在两个安卓设备之间直接建立 TCP/IP 网络
【发布时间】:2013-05-01 03:26:11
【问题描述】:

嘿,我只是网络的初学者。

考虑到 wifi 和 GPRS/3G 连接中有 Nat 路由器,是否可以在不使用任何中间专用服务器的情况下通过 Internet 使用套接字将两个 android 设备相互连接。

我听说您需要先向其他设备发送一条传出消息,然后只有 NAT 允许该设备回复您。但是当两个设备都在 NAT 后面时,第一个消息或数据包如何到达其中的任何一个?

编辑:观察-> 当我查询我的公共 IP 地址的位置时,我得到随机位置 像其他城市,有时像其他州一样!!!怎么了?谁能解释一下?

【问题讨论】:

    标签: java android networking tcp nat


    【解决方案1】:

    这种解决方案的整体设计涉及使用第三方服务器。为了让客户端相互连接,对方必须知道它们的公共 IP(即 NAT IP)。当我不得不做类似的事情时,我实现了STUN,这是用于建立对等连接的ICE 技术的一部分。 STUN 支持 TCP 和 UDP 流量。如果你想了解 STUN,你也应该阅读TURN

    尽管 STUN 需要第三方用户才能让客户端直接连接,但仍有许多公共 STUN 服务器可用。这是one of the lists 出现的快速谷歌搜索。

    【讨论】:

    • 因此,就像您联系一台服务器,该服务器为您提供您的公共 IP 和端口,其他设备可能会使用这些服务器与您联系!不是吗?但是当两个设备都在后面说受限的锥体(ip 或端口)NAT 时,即使在拥有其 ip 和端口后,设备如何联系其他设备
    • 是的,这或多或少是正确的。*关于 TCP 打孔的文章的“算法”部分给出了一些技术示例:en.wikipedia.org/wiki/TCP_hole_punching
    最近更新 更多