Android扫描本地子网

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

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

我不得不首先对IP扫描进行硬编码,因为我无法确定仿真器中的IP地址,所以我知道我至少扫描了正确的范围。

简介:如何通过本地子网上的模拟器内部的套接字连接到服务器?

谢谢大家!

这是请求的代码:

public static ArrayList serviceScanner() { ArrayList servers = new ArrayList(); // 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; } 

}

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

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