我正在编写一款小型测试Android应用程序,但在模拟器上遇到了一个小(大)问题。
扫描本地子网以查找运行我的软件服务器部分的计算机的代码没有返回任何内容!这段代码在桌面端完美运行,因此我知道模拟器内部出了问题。
我必须先硬编码IP扫描,因为我无法确定模拟器内的IP地址,所以我知道至少正在扫描正确的范围。
总结:如何从模拟器内部通过套接字连接到本地子网上的服务器?
谢谢大家!
以下是请求的代码:
扫描本地子网以查找运行我的软件服务器部分的计算机的代码没有返回任何内容!这段代码在桌面端完美运行,因此我知道模拟器内部出了问题。
我必须先硬编码IP扫描,因为我无法确定模拟器内的IP地址,所以我知道至少正在扫描正确的范围。
总结:如何从模拟器内部通过套接字连接到本地子网上的服务器?
谢谢大家!
以下是请求的代码:
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;
}
}