【问题标题】:Socket communication on Android localhostAndroid localhost 上的套接字通信
【发布时间】:2014-03-17 13:34:43
【问题描述】:

我正在开发多个需要通过套接字相互通信的应用程序。首先,我需要他们能够在 localhost 上进行通信。因此,当我在手机上同时运行它们时,它们可以进行通信(我知道在同一部手机上可以更简单地执行此操作,但将来它们将在不同的手机上运行)。

我的套接字通信代码与此非常相似:link

不同之处在于我的应用程序将其作为前台服务运行。

我已将客户端上服务器的 ip 设置为 127.0.0.1,但它们就是无法连接(不在模拟器中,也不是在真手机上)。我错过了什么?

更新: 我找到了一种简单的方法来获取设备自己的 IP 地址,因此我使用的是 localhost(使用 www.google.com 域)而不是 localhost:answer to "java InetAddress.getLocalHost(); returns 127.0.0.1 … how to get REAL IP?"

也许它不太好,但它确实有效。

【问题讨论】:

  • “我的代码 ... 与 ... 非常相似”会导致很多假设,并且经常会导致完全遗漏的问题 => 发布 您的 代码。如果only“区别在于我的应用程序将其作为前台服务运行”,那么您的代码应该是相同的,因为您没有在代码中设置运行模式。为了通过套接字与任何设备通信,双方都需要知道彼此的 IP 地址才能连接。
  • 我没有添加我的代码的原因是我的问题并没有真正涉及它,因为我知道它应该可以工作(你可以在链接上看到这没什么大不了的)。我只是问是否有办法获取环回 IP 或 localhost 以进行套接字通信,但似乎没有简单的方法。

标签: java android sockets localhost


【解决方案1】:

您需要设置每个人的本地 IP 地址,以便他们可以在您的局域网内进行通信。所以使用像 192.168.1.X 这样的地址。无论您将设备作为虚拟设备还是物理设备运行,您都可以轻松知道它们访问路由器 Web 界面并查看其绑定 IP 的本地 IP 地址。

【讨论】:

  • 是的,但没有通用的解决方案吗?我的意思是我可能不得不在其他网络上展示这个,我真的不想每次都手动设置 IP :( .
  • 恐怕没有。实现此类目标的唯一方法是让您的设备同时具有公共 IP 和静态 IP。实现这一目标的其他方法(尽管我不知道这是否适合您的实现)是使用 Google Cloud Messaging,您有一个服务器,可以将消息发送到所有注册到您的服务器的设备。所以这种方式你没有使用 IP,而是依赖于谷歌的已注册设备列表。你在这里有更多信息:developer.android.com/google/gcm/index.html
  • 好的,谢谢你的提示。我可能会通过 WifiManager 或类似的东西获得当前的 IP 地址。如果我手动添加IP,它确实有效,所以你得到了一个赞成:)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-24
  • 2015-12-26
  • 2017-08-03
  • 1970-01-01
  • 2014-05-18
相关资源
最近更新 更多