3
我目前正在編寫一個小型測試Android應用程序,並且已經通過模擬器運行了一個小(大)問題。Android掃描本地子網
出去掃描運行我的服務器的計算機的本地子網的代碼不會返回任何內容!該代碼在桌面部分完美運行,所以我知道我的模擬器內部有問題。
我必須首先對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;
}
}
感謝您的回覆。 我試圖連接到10.115.23。*範圍內的機器。 – David
那麼這就是爲什麼NAT後面的私人地址很糟糕,最好是爲每臺機器使用公共地址。你有兩個網絡都使用相同的地址空間。建議: 1.重新編號您的網絡使用不同的子網。 2. 在真實設備上進行調試 - 這比使用模擬器並不困難,並且通常更好 – Richard
我不能。我們的網絡設置爲使用10.115.23範圍,目前我沒有任何物理設備需要測試。 我試圖通過套接字連接到10.0.2.2的本地機器,現在我不能!有什麼不對.. – David