• android模拟器与pc,模拟器与模拟之间用socket进行通信和获得模拟器ip地址程序


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

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

            获取模拟器名称:

            >adb devices

            List of devices attached

            emulator-5554 device

            emulator-5556 device

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

     

    【PC-SERVER / 模拟器-CLIENT】

            目的:通过7100端口跟服务器进行通信。

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

     

            方法1:

            PC-SERVER:ServerSocket server = new ServerSocket(7100);

            模拟器-CLIENT:Socket socket = new Socket("192.168.1.3", 7100);

            方法2:

            PC-SERVER:ServerSocket server = new ServerSocket(7100);

            模拟器-CLIENT:Socket socket = new Socket("10.0.2.2", 7100);

     

    【模拟器-SERVER / PC-CLIENT】

            目的:连接到服务器的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上,运行一个用于数据中继的后台程序,进行数据的转发。

     

    【模拟器(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一样。

    转自:http://japankn.iteye.com/blog/1744031

  • 相关阅读:
    关于VBA的Exit For到底是怎样跳出for循环的小例子
    关于VBA的Exit For到底是怎样跳出for循环的小例子
    C#-Task.Run 和 Task.Factory.StartNew 区别
    java数组使用 四 反转数组元素
    java数组使用 三 循环数组元素
    java数组使用 二 数组的三种初始化
    java数组使用 一
    java方法 使用 四 可变参数
    java方法 使用 三 求阶乘
    java方法 使用 二 查找最大值
  • 原文地址:https://www.cnblogs.com/harry335/p/5722495.html
Copyright © 2020-2023  润新知