实现本机2个模拟器之间的网络通信

【本机(PC)IP以及Android模拟器IP的说明】

在本机上启动两个模拟器,本机(PC)和模拟器的信息如下:

可以看到,两个模拟器的IP地址是完全一样的,所以要实现两个模拟器之间的通信,使用模拟器的IP地址是办不到的。

获取模拟器名称:

>adbdevices
List ofdevices attached
emulator-5554	device
emulator-5556	device

模拟器提供了一个特殊的IP,此IP的地址为10.0.2.2,此IP地址可以说等同于PC本机的IP地址127.0.0.1。所以,通过此特殊IP地址,实现PC本机与模拟器的通信是没有问题。

下面就几种典型的模式进行说明:

1、【PC—SERVER / 模拟器-CLIENT】

目的:通过模拟器中客户端 跟 PC上的服务器7100端口进行通信。

实施方法比较简单,直接按照下面的方法就行了。

方法1:

//PC—SERVER:
    ServerSocket server = new ServerSocket(7100);
//模拟器-CLIENT
    Socket socket = new Socket("10.1.36.58",7100);
方法2:

//PC-SERVER:
    ServerSocket server = new ServerSocket(7100);
//模拟器-CLIENT:
    Socket socket = new Socket("10.0.2.2", 7100);//模拟器提供的特殊IP地址,此地址等同于本机的IP地址127.0.0.1
2、【模拟器-SERVER / PC-CLIENT】

目的:通过PC上的客户端 跟 模拟器中服务器7100端口进行通信。

实施操作稍微复杂一些,不能按照前面的方法进行,要达到此目的,先要进行端口映射,把本机端口tcp/6100映射到 模拟器tcp/7100端口(udp也一样)。

>adb –s emulator-5554 forward tcp:6100 tcp:7100

端口映射成功后,再进行下面的实验。

方法1(正确):

模拟器-SERVER:
    ServerSocket server = new ServerSocket(7100);
PC-CLIENT:
    Socket socket = new Socket("127.0.0.1", 6100);

方法2错误):

模拟器-SERVER:
    ServerSocket server = new ServerSocket(7100);
PC-CLIENT:
    Socket socket = new Socket("192.168.1.3", 6100);

    错误原因是127.0.0.1是本机环路IP,跟本机IP没有映射关系,所以发送到本机IP的连接请求,无法映射到127.0.0.1的环路IP上。

由于这个原因,两台PC机上的模拟器之间,是无法进行网络连接的。如果要实现连接,只能在作为服务器的PC上,运行一个用于数据中继的后台程序,进行数据的转发

3、【模拟器(5554)-SERVER/ 模拟器(5556)-CLIENT

目的:模拟器(5556)连接到模拟器(5554)7100端口。

实施操作也相对复杂一些。要达到此目的,也要先进行端口映射。

把本机端口TCP/6100映射到模拟器(5554)TCP/7100端口(UDP也是一样)

>adb –s emulator-5554 forward tcp:6100 tcp:7100

端口映射成功后,再进行下面的实验。

方法1(正确):

//模拟器(5554)-SERVER:
    ServerSocket server = new ServerSocket(7100);
//模拟器(5556)-CLIENT:
    Socket socket = new Socket("10.0.2.2", 6100);

原理说明;

模拟器 (5556) 通过连接 10.0.2.2:6100 ,相当于连接本机( PC )的 127.0.0.1:6100 ,由于本机 IP 6100 端口进行过端口映射,映射到模拟器 (5554) 7100 端口。所以,来自模拟器 (5556) 的连接请求会发送到模拟器 (5554) 上。实现了两个模拟器之间的网络通信功能。此方法在本机调试时非常有用。

方法2错误):

//模拟器(5554)-SERVER:
    ServerSocket server = new ServerSocket(7100);
//模拟器(5556)-CLIENT:
    Socket socket = new Socket("192.168.1.3", 6100);

错误原因跟【PC-CLIENT/ 模拟器-SERVER】的方法2一样。


















  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值