Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 基于internet的宽带P2P聊天应用_Android_Networking_Routes_P2p_End To End - Fatal编程技术网

Android 基于internet的宽带P2P聊天应用

Android 基于internet的宽带P2P聊天应用,android,networking,routes,p2p,end-to-end,Android,Networking,Routes,P2p,End To End,我想建立一个p2p手机聊天应用程序,可以通过互联网连接全球不同的用户。我搜索了网络,但没有发现任何我特别想要的东西。我发现很多p2p方法都使用wifi、蓝牙、nfc等,但这些方法只能在小范围内实现。我还发现了一种只使用服务器更新连接设备地址的方法。但我想构建一个完全没有任何服务器的聊天应用程序,不同部分的用户应该能够通过互联网连接。我不知道是否有任何联系建立机制可以这样做。请帮我找到一个解决方案。这不再是一个新的主题,人们在这个主题上花了很多时间,但仍然没有完美的解决方案 NAT阻止我们彼此直接

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

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

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可能需要很多词,请参考。“NAT实现分类”部分。

“NAT阻止我们彼此直接连接。”这就是为什么我们都应该尽快转向IPv6。IPv6恢复了IP端到端的模式,在这种模式中,每个主机都获得一个唯一的全局IP地址。在美国,这一比例超过45%,落后于德国和印度等其他国家。许多人已经有了IPv6,甚至不知道它(甚至有些人拥有并使用它也不知道他们正在做什么)。@RonMaupin我的IPv6地址每天都在变化它是唯一的,但不是静态的。因此,根据上面的解释,在ipv6中,我们也不能永远从A连接到B,因为它每天都在变化,即使我使用服务器C。因此,基本上我想知道切换到ipv6是如何解决问题的。请解释“我的ipv6地址每天都在变化,它是唯一的,但不是静态的。”这意味着您的ISP是一家住宅ISP,试图阻止此类事情发生。大多数ISP都不是这样做的,当然也不是与企业合作。您描述的内容需要外部帮助,例如协调服务器。