首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android Scan本地子网

Android Scan本地子网
EN

Stack Overflow用户
提问于 2011-02-24 22:57:34
回答 1查看 6.2K关注 0票数 4

我目前正在写一个小的测试Android应用程序,在模拟器上遇到了一个小(大)的问题。

用于扫描本地子网以查找运行我的服务器软件的计算机的代码没有返回任何内容!这段代码在桌面部分运行得很好,所以我知道我的模拟器内部出了问题。

我必须首先硬编码IP扫描,因为我不能在模拟器中确定IP地址,所以我知道我至少扫描了正确的范围。

摘要:如何通过套接字从本地子网上的仿真器中连接到服务器?

谢谢大家!

以下是请求的代码:

代码语言:javascript
复制
public static ArrayList<String> serviceScanner() {
    ArrayList<String> servers = new ArrayList<String>();

    // Get the IP of the local machine
    String iIPv4 = "";
    String test = "";


    //getLocalIpAddress();
    //System.out.println(test);

    try {
        // Get localhost
        InetAddress addr = InetAddress.getLocalHost();

        // Get IP Address
        byte[] ipAddr = addr.getAddress();

        iIPv4 = addr.toString();
        iIPv4 = iIPv4.substring(iIPv4.indexOf("/") + 1);
        iIPv4 = "10.0.2.1";
    } catch (UnknownHostException e) {
        // Exception output
    }
    // IP stuff.
    String IPv4Start = "", IPv4End = "";
    iIPv4 = iIPv4.substring(0, iIPv4.lastIndexOf("."));
    iIPv4 += ".";
    IPv4Start = iIPv4 + "1";
    IPv4End = iIPv4 + "254";


    PrintWriter out = null;
    BufferedReader in = null;

    // Loop to scan each address on the local subnet
    for (int i = 1; i < 255; i++) {

        try {
            System.out.println(iIPv4+i);
            Socket mySocket = new Socket();
            SocketAddress address = new InetSocketAddress(iIPv4 + i, port);

            mySocket.connect(address, 5);

            out = new PrintWriter(mySocket.getOutputStream(), true);
            in = new BufferedReader(new InputStreamReader(
                    mySocket.getInputStream()));
            out.println("Scanning!");
            String fromServer;
            while ((fromServer = in.readLine()) != null) {
                System.out.println("Server: " + fromServer);
                if (fromServer.equals("Server here!")) {
                    servers.add(iIPv4 + i);
                    mySocket.close();
                    break;
                }
            }
            mySocket.close();
            out.close();
            in.close();

        } catch (UnknownHostException e) {
        } catch (IOException e) {
        }
    }
    return servers;
}

}

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-02-24 23:56:46

仿真程序与您的计算机不在同一子网中。它在自己的虚拟子网上,通过自己的NAT路由器连接到计算机。这里有一个解释:http://developer.android.com/guide/developing/devices/emulator.html#emulatornetworking

但是,仿真器应该能够通过其路由器连接到Internet上任何位置的任何套接字。您尝试连接的地址是什么?仿真器不会路由10.0.0.0私有地址,因为它自己使用这些地址。不确定168.192.0.0。你能发布失败的代码吗?

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5106315

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档