P2P 聊天应用程序,可通过互联网在广泛的网络上运行

问题描述

我想构建一个 p2p 手机聊天应用程序,它可以通过互联网连接全球不同的用户。我搜索了网络,但没有遇到我特别想要的任何内容。我发现有很多使用 wifi、蓝牙、nfc 等的 p2p 方法,但这些只能在小范围内实现。我还发现了一种只使用服务器来更新连接设备地址的方法。但是我想构建一个完全没有任何服务器的聊天应用程序,并且跨越不同部分的用户应该能够通过互联网进行连接。如果存在的话,我不知道任何连接建立机制。请帮我找到解决办法。

解决方法

这已经不是一个新的话题了,人们在这个话题上花了很多时间,但仍然没有完美的解决方案。

NAT 阻止我们直接相互连接。

让我试着解释一下:

假设您有两个对等方 A、B,它们想要建立连接。

在真实的网络环境中,A 和 B 都在 NAT 之后,因此它们无法通过局域网 IP 地址(例如 192.168.. 或 10.0..).

为了解决上述问题,人们尝试启动公共服务器(C)以获取 A 和 B 的公共 IP 地址。

(1) A connects to C,we can get A's public IP address from the C.

(2) B connects to C,we can get B's public IP address from the C.

(3) Then C sends A's public IP to B,sends B's public IP to A. After that,A and B get the public IP of each other.

(4) Then A and B can establish a connection with the public IPs.

但这取决于 NAT 的实现。

对于某些类型的 NAT 实现,A 和 B 的公共 IP 可能会更改。 A/B的公网IP只有在当前连接没有断开的情况下才会保持不变,这意味着即使我们通过服务器C互相交换A/B的公网IP,A和B也无法相互连接。

详细解释NAT可能需要很多文字,请参考https://en.wikipedia.org/wiki/Network_address_translation。 “NAT 实现分类”部分。