【问题标题】:Android socket to Java ServerSocket ConnectionAndroid 套接字到 Java ServerSocket 连接
【发布时间】:2012-08-28 13:45:33
【问题描述】:

我无法将模拟的 Android Activity 连接到在我的计算机上运行的常规 Java 程序。以下是我采取的一些预防措施,应该可以解决它们...

  • 我尝试连接到 10.0.2.2,即模拟器所在 localhost 的 IP 地址
  • 我生成了一个独立于 UI 线程的新线程来建立连接。 (我没有做花哨的工作线程,我只是创建了一个新线程并说.start())

所以基本上你的系统是由一个普通的 Java 程序组成的,它声明一个 ServerSocket,然后等待 .accept() 方法。我启动了那个程序,希望它坐在那里等待。然后我切换到我的 Activity 类,它有一个按钮的 onClick 方法。该方法调用我的新线程的 .start() 方法。在我的活动的 .run 方法中,我声明了一个新的 Socket 并尝试连接到本地主机。

您还知道我应该注意的其他事项吗?主要问题是什么都没有发生。我在本地主机 java 程序中的 .accept 方法调用之后放置了一个断点,但我从未到达它。

【问题讨论】:

  • 这不是真正的代码问题,而是模拟器使用计算机网络的更多方式。模拟器位于内部虚假网络上,无法访问您的计算机实际网络。实际的硬件设备不会有这个问题。
  • 谢谢尼克,这似乎是问题所在。我以为我在某个可以与本地主机通信的地方读到,但我想不是。这会使调试稍微困难一些...

标签: java android sockets serversocket


【解决方案1】:

请参阅此线程以将模拟器网络连接到计算机网络。希望这会有所帮助

How to connect android emulator to the internet

帖子的最佳答案是

我认为一些答案可能已经解决了这个问题,但这是对我有用的。

假设当您在无线网络上并且安装了 LAN 卡时出现问题,则问题是模拟器试图从该 LAN 卡获取其 DNS 设置。当您通过该 LAN 连接时,这不是问题,但如果您使用无线连接,则完全没用。我在使用笔记本电脑时注意到了这一点。

那么,如何解决?简单:禁用您的 LAN 卡。真的。只需转到您的网络连接,找到您的 LAN 卡,右键单击它并选择禁用。现在试试你的模拟器。如果你像我一样,它突然......工作! - 神器

我发现这个关于答案的评论很有用。

实际上,模拟器采用具有最高优先级的适配器,因此切换适配器的优先级(无线为最高)也应该可以工作,并且不需要您完全禁用 LAN 适配器。不过,感谢您的回答,让我头疼 – Anzeo 2011 年 4 月 6 日 14:47

在您的情况下,Java 程序在同一台机器上。所以我认为,Java 程序 Socket 可能正在绑定到其中一个网络接口的 IP,而 Android 正在尝试连接到另一个。可以肯定的是,只需禁用除一个以外的所有网络接口并运行您的程序。发布您可以调整网络接口的优先级。

【讨论】:

  • 请在您的答案中添加更多详细信息,以防您提供的链接发生变化。在这种情况下,您的回答将无济于事。
  • 感谢@Dckuehm 的建议,我编辑了答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多