我想连接两个位于不同位置但连接到互联网的设备,一台运行Windows 10和智能手机安卓的计算机 . 该应用程序是一个简单的UDP套接字,用于在它们之间传输数据,但我有不同的场景 .

第一种情景 . 具有公共IP和智能手机的PC支持3G / 4G CG-NAT)PC打开de UDP套接字,智能手机连接到公共IP,方便快捷 .

第二种情景 . 带有公共IP和智能手机的NAT背后的PC背后的3G / 4G NAT)

  • 选项A)PC配置一个端口转发到NAT的内部IP,然后智能手机连接到该公共IP . 容易但不快,因为客户端必须配置NAT .

  • 选项B)使用UDP HOLE PUNCHING在NAT上打开一个洞,然后客户端连接到它 .

第三种情景 . PC和智能手机都落后于CG-NAT . 这是我的问题,PC有时候是CG-NAT的背后,也许是因为ISP使用这种技术或者可能使用来自另一个智能手机的Wifi热点连接到互联网 . 据我所知,我无法使用任何协议(UPnP,PCP等)配置CG-NAT,因此我无法进行端口转发 . 由于“端口随机化”,UDP Hole Punching既不是一个选项,所以ISP在走出CG-NAT时会改变我的源端口,并且每个连接都会改变 .

我正在开发一个依赖于此的项目,在没有技术细节的情况下,PC和智能手机之间的直接连接,并始终工作,两个客户都有互联网,没关系,如果防火墙,NAT后面等...我正在考虑使用第三个 Cloud 服务器使用公共IP来连接它们但是只是为了 Build 连接,而不是转发所有流量,因为这会增加我的项目的延迟和流量成本,这是不负担得起的 . 那么......有什么技术可以解决我的问题吗?

谢谢!