gpt4 book ai didi

android - NAT穿越技术与思路

转载 作者:太空狗 更新时间:2023-10-29 15:18:23 24 4
gpt4 key购买 nike

所以我正在做 NAT 穿越。

接下来的场景是:我有两部 Android 手机,我想使用 HTTP 服务器(两部设备都在 NAT 后面)连接它们(套接字)。

到目前为止一切顺利,两个客户端都连接到 HTTP 服务器,HTTP 服务器记录他们的 IP 地址和端口,

但是有一个小问题,因为我使用 Java HttpDefaultClient(),每次我从客户端向服务器发送请求时它都会更改端口。好的,这听起来像是一个简单的问题:让我们只使用 Socket() 实际维护到服务器的有效 TCP 连接。

public Socket(InetAddress 地址, 国际港口, InetAddress localAddr, 本地端口) 抛出 IOException

我将只使用这个类并将 localPort 随机放置一些我会记住的东西。现在我又做了一遍,这一次端口似乎不会像我想要的那样改变。

现在我有了对手的 IP 和端口(他也在 NAT 后面),理论上我可以断开 SERVER 连接并使用我已经用来实际托管客户端服务器的相同本地端口?

除非,现在是我有疑问的部分:1)如果我删除 HTTP 服务器套接字,NAT 会理解并删除端口映射吗?(那很糟糕)2) symmetric-cone nat 的实际传递是如何工作的?3) STUN 库的工作方式是否有所不同?

最佳答案

NAT 的工作方式并不完全相同,但您可以信赖以下几点:1) 如果您的客户端认为它在端口 X 上,NAT 会将其转换为不同的端口2) NAT 通常允许响应传出数据包的数据包。

STUN 尝试在服务器的帮助下猜测实际的传出端口是什么,然后将地址+端口传递给其他客户端。这不是很可靠。 TURN 只是通过服务器路由所有内容。这更可靠,尽管它会在服务器上产生 CPU 和带宽成本。

如果可以利用现有的代码进行NAT穿越,就可以省去很多麻烦。否则,通过 socket 执行类似 TURN 的操作,或使用类似 Urban Airship 的操作。我也使用过二进制 SMS,但那是针对特殊情况。

关于android - NAT穿越技术与思路,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10401200/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com