如何在没有IP知识的情况下进行通信

时间:2011-06-16 05:16:04

标签: android tcp network-programming


我正在开发一个使用 tcp 连接的应用程序。目前我正在使用硬编码的IP地址作为样本进行通信,但在现实世界中,我认为并非如此。我们遇到任何移动设备并开始通信/共享等,而无需事先了解其他人的IP。

在这种情况下如何获取正在使用我的应用程序的人的IP地址。如何在没有IP地址的先验知识的情况下进行通信。如何实现这一点。帮我分类。

提前谢谢。


修改
如果用户通过GPRS / 3G连接连接互联网,那么他的IP地址将根据服务提供商而改变。我怎么能找到它。

3 个答案:

答案 0 :(得分:2)

鉴于你在评论其他答案,如果你想要的是其他Android设备的IP地址来做某种P2P游戏,你应该注意到没有可靠的方法直接这样做。

如果用户连接在同一个局域网中,您可以在应用程序中使用UDP广播提供某种发现服务。

如果用户连接到互联网并拥有公共IP地址,那么您可以使用某个中间服务器在启动时注册用户,让他们发现使用该服务器的其他用户。

但是(这是最常见的情况)如果用户连接到Internet并拥有私有IP地址(例如,当他们在LAN上与WIFI连接时),您需要某种服务器充当代理服务器他们的请求,因为没有办法从一个natted IP到另一个natted IP建立直接的TCP连接。有一些解决方案可以解决这个问题,你可以从学习XMPP及其工作原理开始。

答案 1 :(得分:1)

您的应用必须使用DNS。您首先需要将您的IP引入DNS系统。您可以通过注册域名&使用托管服务提供商为主机名设置A / AAAA记录(或者您可以设置自己的DNS服务器)。您甚至可以找到一些免费的DNS提供商。

在您的应用中,您可以硬编码您之前设置的完全限定域名,例如 - app.foo.com并使用android gethostbyname库调用为您获取IP地址。然后,本地DNS解析器将转到其DNS服务器并获取与app.foo.com相对应的IP地址。

答案 2 :(得分:0)

您可以使用DNS吗?如果需要,您仍然可以对域名进行硬编码,并且可以将域名配置为随时指向任何IP地址。