Client Socket无法连接到正在运行的Socket服务器

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

在我的开发机器上, SocketServer (服务器也用Java编写)正在端口8666侦听127.0.1.1 。 我还在Android应用的应用清单中添加了互联网访问权限。

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

这可能有什么问题?

更新

我在某些方面的问题与此有关 。 我试图访问在运行模拟器的机器中运行的服务器。

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

尝试使用Port Forwarding

从adb位置的命令提示符处,

adb forward tcp:8666 tcp:8666

用于设置任意端口转发的forward命令 – 将特定主机端口上的请求转发到仿真器/设备实例上的其他端口。 以下是如何设置主机端口8666到仿真器/设备端口8666的转发:

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

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

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

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

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

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