1

我打算为android制作一个P2P聊天应用程序:

所以这是我的想法:

  1. 客户端将连接到服务器以下载(朋友的)IP 地址列表
  2. 然后它会尝试打开一个到朋友IP地址(在指定端口上)的套接字并将其写入套接字
  3. 朋友的客户端将打开一个套接字并从那里读取它。

这个想法很简单(也许太简单了?)但这个想法似乎存在一个固有的问题。

使用 NAT 和动态 IP 查找实际 IP 可能很困难。

即使客户端定期更新它在服务器上的 IP 地址(我们可以从设备本身获取它的本地 IP,我们可以从服务器获取公共 IP),当我需要打开一个到设备的套接字时,我应该打开什么 IP 地址插座到?公共IP还是本地IP?

显然,打开本地 ip 的套接字是行不通的,但是如果我打开一个到公共 IP 的套接字(我朋友的客户端正在另一端监听),消息应该如何到达我朋友的设备?

4

1 回答 1

0

您不能使用私有地址,因为它们没有在公共互联网上路由,因此您需要使用公共 IP。找到真正的 IP 地址可能并不难,因为对您服务器的请求将来自该公共 IP。真正的挑战是如何缓解 PAT (NAT) 造成的问题。您可以尝试使用 IGD 协议 (UPnP) 自动配置端口映射,但并非每个路由器都支持它。您也可以使用 UPnP 来获取公共 IP。

于 2013-08-05T19:32:41.030 回答