我打算为android制作一个P2P聊天应用程序:
所以这是我的想法:
- 客户端将连接到服务器以下载(朋友的)IP 地址列表
- 然后它会尝试打开一个到朋友IP地址(在指定端口上)的套接字并将其写入套接字
- 朋友的客户端将打开一个套接字并从那里读取它。
这个想法很简单(也许太简单了?)但这个想法似乎存在一个固有的问题。
使用 NAT 和动态 IP 查找实际 IP 可能很困难。
即使客户端定期更新它在服务器上的 IP 地址(我们可以从设备本身获取它的本地 IP,我们可以从服务器获取公共 IP),当我需要打开一个到设备的套接字时,我应该打开什么 IP 地址插座到?公共IP还是本地IP?
显然,打开本地 ip 的套接字是行不通的,但是如果我打开一个到公共 IP 的套接字(我朋友的客户端正在另一端监听),消息应该如何到达我朋友的设备?