我的活动需要与位于我的开发机器上的java服务器通信 . 实际上,使用模拟器,我可以通过特殊的10.0.2.2地址访问服务器套接字 . 现在我想在通过usb连接的手机上测试我的应用程序,但似乎我不能使用10.0.2.2来访问我的开发机器localhost了 . 自然地使用wifi路由器和正确的局域网寻址可以解决问题,但我需要使用USB连接 . 任何提示?
编辑:
只是添加了不同的场景让每个人都更好地理解
1. Emulator-based scenario:
-
在我的电脑上运行的标准java服务器@localhost:15000
-
在我的模拟器上运行的android java客户端 .
当Android应用程序需要联系服务器时,它使用10.0.2.2:15000,如指定的here . 一切正常 .
2. Proper wifi scenario with physical connected device:
-
在我的电脑上运行的标准java服务器@ 192.168.1.10:15000 .
-
在我的设备上运行的android java客户端,分配了192.168.1.11地址 .
当Android应用程序需要联系服务器时,它使用192.168.1.10:15000并且一切正常 .
3. Desired scenario:
-
在我的电脑上运行的标准java服务器@localhost:15000 .
-
在我的设备上运行的android java客户端通过usb电缆连接 . 没有网络活动 .
当Android应用程序需要联系服务器时,它会尝试连接到10.0.2.2:15000,但抛出异常(网络无法访问) . 看起来特殊地址10.0.2.2仅适用于仿真器实例 .
我只是想知道在adb / adt套件中是否有办法从通过usb电缆连接的设备访问pc地址 . 我希望现在更清楚一点 . 谢谢 .
2 回答
似乎没有办法让场景#3正常工作,因为USB连接不是真正的网络连接,并且手机没有与之关联的ip .
实际上我的解决方案是在我的手机和我的电脑之间使用ad-hoc wifi连接 . 此方案类似于#2,但没有路由器或dhcp . 不幸的是,由于this issue,我的Hero无法原生处理ad-hoc连接 . 所以我必须root我的设备并手动更改一些配置脚本 . 我希望下一版本中可以使用这样的功能 .
您可以通过USB设置从开机电脑连接到手机,但必须
adb forward
. 但是,我不认为你可以通过usb路由其他方式:设置从手机到电脑的连接 .你可以让你的电脑连接到手机并检查它有哪些IP .
在考虑它时,我意识到,使用
adb forward
你必须使用localhost
作为你的主机,所以也许你也可以在手机上执行此操作:adb forward
你要使用的端口和手机上的端口,连接到localhost上的那个端口 .