【问题标题】:Client Socket cannot connect to running Socket server客户端 Socket 无法连接到正在运行的 Socket 服务器
【发布时间】:2012-06-28 12:23:03
【问题描述】:

我有使用Socket 与服务器通信的Android 客户端应用程序。

在我的开发机器上,SocketServer(服务器也是用 Java 编写的)正在侦听端口 8666127.0.1.1。我还在 Android 应用的 App manifest 中添加了 Internet 访问权限。

但是当我尝试使用 client = new Socket("127.0.1.1",8666) 实例化 Socket 对象时,它会抛出 IOExceptionconnection refused 消息(也尝试使用 localhost 而不是手动提供 IP 地址,但它也不起作用)。虽然我可以从简单的控制台 Java 程序轻松连接到服务器。

这里有什么问题?

更新

我的问题在某些方面与this 有关。我正在尝试访问在运行模拟器的机器上运行的服务器。

注意:我知道不建议在任何 Activity 类中执行网络 IO,我也不这样做,上面的代码只是一个简单易懂的问题。

【问题讨论】:

  • 在你的安卓应用中尝试系统的IP地址,或者10.0.2.2而不是127.0.1.1。
  • 您的 Android 代码是在模拟器还是实际手机上运行?
  • Wireshark 在这种情况下是您的朋友。记录流量并检查问题所在。仔细检查 IP 地址和端口号。
  • @Neal:我正在模拟器中运行应用程序。
  • 我发布了我的答案。快乐编码..!

标签: java android sockets


【解决方案1】:

尝试使用,端口转发

从 adb 位置的命令提示符,

adb forward tcp:8666 tcp:8666

forward 命令设置任意端口转发——将特定主机端口上的请求转发到模拟器/设备实例上的不同端口。以下是如何设置主机端口 8666 到模拟器/设备端口 8666 的转发:

如果这没有帮助,请发布您的代码和 logcat 错误。

【讨论】:

  • 好的,所有东西(应用服务器和模拟器)在运行命令后都需要重启,现在一切正常。非常感谢..!!
  • 欢迎好友..!快乐编码..!
【解决方案2】:

如果我猜对了:您的套接字服务器在单独的机器上运行。您不能使用 127.0.0.1 通过您的 Android 手机连接到该服务器,因为这是本地环回地址。 找到您机器的 IP 地址并使用它。

如果在您尝试连接到您机器上运行的套接字服务器时在模拟器上使用它,您仍然无法使用 127.0.0.1,因为这是模拟器的本地环回地址。

【讨论】:

  • 模拟器和Socket服务器都在同一台物理机上运行,​​我尝试使用系统的IP地址而不是环回,但问题仍然存在。
  • @Kush:尝试理解 localhost 和 127.0.0.1 对于机器和模拟器都是本地的。所以你的机器有自己的环回地址,模拟器也有。使用 10.0.2.2。请参阅此 SO Post stackoverflow.com/questions/2234742/… 如果它仍然无法正常工作,请确保防火墙没有阻止访问该套接字。
【解决方案3】:

您的 Android 代码是在模拟器中运行,还是通过 WiFi 在真实硬件上运行?如果您在模拟器中运行,那么您的开发机器的 IP 地址可能是 10.0.2.2(请参阅Android Developer Tools: Emulator)。

如果您的应用在通过 WiFi 连接的 Android 手机上运行,​​您必须指定机器的 IP 地址,而不是环回地址。

另外,当您说您的 SocketServer 正在侦听 127.0.1.1 时,您是否绑定到该接口?如果您期望来自其他接口的连接,则不应绑定到环回。

【讨论】:

  • 我在模拟器中运行应用程序,尝试使用10.0.2.2,也不起作用。
  • 刚刚更新了关于绑定服务器上的接口。如果您只在环回上收听,手机将无法连接。
  • 我还没有手动绑定服务器Socket监听127.0.1.1,当我的服务器启动时,它会写日志它正在监听传入请求的IP和端口,我不知道为什么,但有时需要127.0.0.1,有时需要127.0.1.1
  • 您可以尝试在绑定中手动指定正确的 IP 地址,这样它就不会绑定环回。如果您不指定接口,它应该监听所有接口...
  • 如何让它监听所有接口?
猜你喜欢
  • 2017-02-13
  • 2018-10-14
  • 2022-09-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-14
  • 1970-01-01
  • 2017-05-15
相关资源
最近更新 更多