我正在为Android开发一个网络应用程序,我仍然坚持将我的真实Android设备与在我的台式计算机上运行的设备模拟器连接。
我已经使用路由器创建了专用网络,因此连接到网络的唯一网络是我的电脑和手机,以避免出现防火墙/关闭端口问题。
我的电脑IP是192.168.1.100,我正在尝试相互ping通,因此我可以实现每个网络节点的海上可达性。从我的PC(不是模拟器控制台)到手机,Ping工作正常。
问题是我想从我的手机ping PC模拟器,而不是PC本身...为此,我使用模拟器控制台...我应该使用我的计算机IP还是应该使用另一个?我在这里看到了一些像“10.0.x.x”这样的ip http://developer.android.com/guide/developing/tools/emulator.html
但我猜这些是用于连接两个EMULATORS,对吗?
此外,我尝试通过套接字连接它们,通过仿真器控制台为端口创建重定向,但仍无法连接它们。
任何线索? 谢谢!
答案 0 :(得分:3)
我尝试了我给你的早期解决方案但它没有用。正如你所说,可能原因是模拟器控制台的redir命令只重定向来自localhost的数据包。
所以我搜索了一个简单的代理服务器,并在同一台机器上使用它来测试它。
http://www.java2s.com/Code/Java/Network-Protocol/Asimpleproxyserver.htm
有了这个,我使用了以下配置:
代理:
String host = "localhost";
int remoteport = 3000;
int localport = 4000;
然后运行模拟器实例:
最后在真实设备上打开一个套接字到端口4000上的机器地址。
所以网络地图如下:
设备< - >机器:4000代理机器:3000< - > :3000 Emulator:2000 - >应用
这对我在设备和模拟器上使用相同的应用程序起作用。
答案 1 :(得分:0)
我得出结论,模拟器只能接收来自环回(127.0.0.1)的数据包,因为当您发出“redir add tcp:port:newPort时,它只重定向第一个端口(与环回相关联)到第二个端口(与“模拟器虚拟IP”相关联)。
我试图创建一个桥接器,它将所有进入我电脑的数据包重定向到IP 127.0.0.1,但仍无法正常工作。因此,我认为模拟器的开发只是为了与其他模拟器进行通信......
我希望有人来到这里与我相矛盾。
答案 2 :(得分:0)
您可以将真实设备与仿真器实例连接。
您是否尝试在模拟设备上设置重定向,然后通过Java套接字连接真实设备?
例如:
在模拟设备上打开侦听端口2000的服务器套接字,然后打开telnet连接并发出命令:
redir add tcp:4000:2000
最后,将真实设备上的套接字打开到端口4000上的机器地址(192.168.1.100)。