zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    SQL Server Audit监控触发器状态
    SQL Server 数据变更时间戳(timestamp)在复制中的运用
    SQL Server 更改跟踪(Chang Tracking)监控表数据
    SQL Server 变更数据捕获(CDC)监控表数据
    SQL Server 事件通知(Event notifications)
    SQL Server 堆表行存储大小(Record Size)
    SQL Server DDL触发器运用
    SQL Server 默认跟踪(Default Trace)
    SQL Server 创建数据库邮件
    SQL Server 跨网段(跨机房)FTP复制
  • 原文地址:https://www.cnblogs.com/harry335/p/5722495.html
Copyright © 2011-2022 走看看