`
japankn
  • 浏览: 209359 次
  • 性别: Icon_minigender_1
  • 来自: 广西
社区版块
存档分类
最新评论

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一样。

 

Android模拟器Ping主机

        众所周之Android模拟器采用的是Qemu,而整个模拟的内核是Linux,虽然没有x-windows界面和bash shell,但测试下基本的Linux Shell还是没有问题的,今天就在android emulator上玩回ping。

        首先我们进入cmd或console状态下,使用cd命令进入Android SDK的Tools命令,可以输入adb shell这时候,这个时候从>变为了#,现在已经在linux shell中了,虽然Android平台没有vi这样的编辑器,但是执行些简单的命令比如cd、rmdir、mkdir还是没有问题,我们直接在Android模拟器中测试ping本机,如# ping localhost,看看返回如图:

[环境相关] 安卓模拟器ping局域网中的其他机器

 

获取android模拟器ip

public String getLocalIpAddress() {
    try {
        for (Enumeration<NetworkInterface> en =NetworkInterface.getNetworkInterfaces();en.hasMoreElements();){

            NetworkInterface intf = en.nextElement();
            for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses();enumIpAddr.hasMoreElements();){

                InetAddress inetAddress = enumIpAddr.nextElement();
                if (!inetAddress.isLoopbackAddress()) {
                    return inetAddress.getHostAddress().toString();
                }
            }
        }
    } catch (SocketException ex) {
        edit_show.append(ex.toString()+"\n");
    }
    return null;
}

  • 大小: 49.2 KB
分享到:
评论
1 楼 hello_player 2013-05-22  
问下,我本机有个html5的应用,我手机连在同一个无线路由器上,怎么打开地址可以看到这个应用?

相关推荐

    android x86模拟器和PC相互通信(socket)

    实现方法:android socket ① 服务程序运行在PC端 ② 客户端程序运行在android模拟器 ...二、 客户端程序需要同样的端口 以及 PC的ip地址进行socket联络 三、 数据通信用进程方式实现,可以支持多个客户端访问

    androidstudio实现socket通讯

    Android通过socket套接字实现网络连接,通过ip地址和ip端口实现访问服务器,从而实现客户端和服务器的连接,然后实现两者数据的互连

    Android应用源码PC端动态演示手机摄像头图像

    本站之前分享过一个PC端动态...可以截屏图片并保存为本地文件,本项目包括java服务端源码和安卓客户端源码通过Socket进行通信。我用模拟器测试的,模拟器录像有点问题,需要的朋友可以用真机测试一下。应该没有问题。

    Android基于Socket聊天室

    Android基于Socket实现的聊天室功能 注解详细 一看就懂 包含服务器和客户端 服务器是一段java代码 客户端直接运行在手机上 用DOS(MyEclipse)开启服务器 然后运行模拟器或者手机即可。 注:请将客户端代码中的ip...

    android串口、TCP,UDP socket编程实践(android端)

    最近一个项目可能要用到socket和串口方面的编程,网上找了很多这方面的资料,例子,不过都不怎么全,而且很多例子不能直接拿来用。花了几天时间,将TCP、UDP、串口整合到一起做了个小的project,由于没有真机,仅在...

    居于socket聊天android

    安卓端必须改IP地址,在consts.java里面改。如果自己没有服务器,那么可以用模拟器利用局域网打开。在打开客户端的时候,必须先打开Server服务端,才可以连接。放心,这个绝对能连接的,是本人手写的demo,希望对...

    Android 开发技巧

    1、ANDROID文件系统与应用程序架构 7 1.1、ANDROID 文件系统 7 1.2、ANDROID应用程序架构 9 2、ANDROID应用程序结构 11 2.1、ACTIVITY 12 2.1.1、概述 12 2.1.2、Activity的生命周期 15 2.1.3、Activity 的创建 16 ...

    Android开发资料合集-World版!

    9.35、获取 IP地址 249 9.36、从输入流中获取数据并以字节数组返回 250 9.37、通过ANDROID 客户端上传数据到服务器 251 9.38、文件下载类 255 9.39、下载文件的进度条提示 263 9.40、通过HTTPCLIENT从指定SERVER获取...

    基于Android的聊天室应用 ChatRoom 1.4

    注意:之前上传的同类资源1.0、1.1、1.2、1.3版本有一些小问题,现在上传修改后的最新版本,各位请注意下载最新版的,主界面的ip地址和port端口号是我的一个服务器上的地址,可以正常连接 一、端点连接机制:基于...

    基于Android的聊天室应用 ChatRoom 1.0

    2、客户端代码直接导入到eclipse中,安装部署即可运行,端口号及IP地址要与服务器端保持一致。 3、推荐测试方式可以用一台真机跟模拟器来实现信息的交互,前提是手机跟电脑必须是在同一个无线网路,请自行设置。 五...

    基于Android的聊天室应用

    2、客户端代码直接导入到eclipse中,安装部署即可运行,端口号及IP地址要与服务器端保持一致。 3、推荐测试方式可以用一台真机跟模拟器进行测试,来实现信息的交互,前提是手机跟电脑必须是在同一个无线网路,请自行...

    易语言-HPSocket同步操作例子

    如果都正确无误,还是提示绑定失败,那么,请将地址改为本机的IP地址(右击网络邻居,查看属性,IP地址)。 ======================================================================= 10、如果数据库连接池启动...

    GluinGW_App_for_Arduino:用于连接 Gluin 和 Arduino 的 Firefox OS 应用程序

    启动本应用,在【设置】选项卡中输入TCP Socket通信的IP地址和端口号,点击【测试与设置】按钮确认显示“OK”。 在 [Devices] 选项卡上添加并设置连接到 Arduino 的部件。 在“设置”选项卡上输

    基于Android的聊天室应用 ChatRoom 1.2

    2、客户端代码直接导入到eclipse中,安装部署即可运行,端口号及IP地址要与服务器端保持一致。 3、推荐测试方式可以用一台真机跟模拟器来实现信息的交互,前提是手机跟电脑必须是在同一个无线网路,请自行设置。 ...

    powerbuilder案例开发集锦(源码光盘)1

    案例5 Web服务器程序 案例6 调用WinFax发送传真 案例7 超级链接的制作 案例8 使用超级链接控件 案例9 获取本机名和IP地址 案例10 使用多线程下载网页 案例11 Socket通信客户端 案例12 ...

    JAVA上百实例源码以及开源项目

    Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行ATM...

    JAVA上百实例源码以及开源项目源代码

    用累加器,以对话状态存储起来,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用完毕,从内存中清除…… Java Socket 聊天通信演示代码 2个目标文件...

Global site tag (gtag.js) - Google Analytics