2

我有 Android 客户端应用程序,它使用Socket.

在我的开发机器上,SocketServer(服务器也是用 Java 编写的)正在监听127.0.1.1port 8666。我还在 Android 应用的应用清单中添加了 Internet 访问权限。

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

这里有什么问题?

更新

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

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

4

3 回答 3

3

尝试使用,端口转发

从 adb 位置的命令提示符,

adb forward tcp:8666 tcp:8666

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

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

于 2012-06-28T12:53:03.107 回答
0

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

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

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

于 2012-06-28T12:29:17.263 回答
0

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

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

于 2012-06-28T12:37:58.293 回答