:)我正在尝试创建一个Android应用程序,它将扫描整个网络以查找特定的开放端口。我正在使用Android Studio(Windows)和模拟器。我可以在程序停止运行之前扫描网络90秒。我没有收到任何logcat错误,我在调试器中丢失了堆栈和程序计数器。没有首先重新启动模拟器,我无法重新启动程序。看起来我失去了对模拟器的任何连接。
我还应该提到删除套接字连接线会导致任务无限期地运行。以前有没有人经历过这样的时间?
任何指向正确方向的人都会非常感激!!
珍妮
private class getNetworkState extends AsyncTask<Integer, Integer, Integer> {
@Override
protected Integer doInBackground(Integer... params) {
for (int subnet2 = 216; subnet2 < 220; subnet2++)
{
for (int subnet = 0; subnet < 255; subnet++)
{
// open a tcp socket
String server = String.format("192.168.%d.%d", subnet2, subnet);
Socket socket = new Socket();
try
{
socket.connect(new InetSocketAddress(server, port), timeOut);
System.out.println("Network state of " + server + " == " + socket.isConnected());
socket.close();
}
catch (Exception e)
{
System.out.println("Network state of " + server + " == " + e);
}
}
}
return 1;
}
答案 0 :(得分:1)
您多久见一次socket.connect(...)中的异常?代码存在的方式,连接失败将抛出异常,套接字将不会被关闭。
我认为更好的做法是关闭finally块中的套接字。如果您的问题的原因是大量的开放套接字,这可能有助于解决问题。
private class getNetworkState extends AsyncTask<Integer, Integer, Integer> {
@Override
protected Integer doInBackground(Integer... params) {
for (int subnet2 = 216; subnet2 < 220; subnet2++)
{
for (int subnet = 0; subnet < 255; subnet++)
{
// open a tcp socket
String server = String.format("192.168.%d.%d", subnet2, subnet);
Socket socket = new Socket();
try
{
socket.connect(new InetSocketAddress(server, port), timeOut);
System.out.println("Network state of " + server + " == " + socket.isConnected());
}
catch (Exception e)
{
System.out.println("Network state of " + server + " == " + e);
} finally {
socket.close();
}
}
}
return 1;
}