我正在尝试制作一个应用程序来扫描特定开放端口(5050)范围内的所有 ip,如果它是开放的,则在 LOG 上写一些消息。
继承人的代码:
public void run(){
for(int i=0;i<256;i++)
{
Log.d("NetworkScanner","attemping to contact 192.168.1."+i);
try {
Socket socket=new Socket(searchIP+i,5050);
possibleClients.add(searchIP);
socket.close();
Log.d("NetworkScanner"," 192.168.1."+i+" YEAAAHHH");
} catch (UnknownHostException e) {
Log.d("NetworkScanner"," 192.168.1."+i+" unavailable");
} catch (IOException e) {
e.printStackTrace();
}
}
}
编辑:这是一个新问题:即使在没有打开端口的情况下在线找到主机,扫描过程(for循环)也会在移动到下一个之前卡住很长时间。扫描每台主机也需要相当长的时间!
最终解决方案是使用默认构造函数创建一个 Socket 对象,然后为主机创建 InetAddr 对象,然后使用套接字 api 的 Connect(InetAddr,timeout) 函数,超时以毫秒(约 300 毫秒)为单位,仅扫描每个 ip 300 毫秒或更短(小于 200 毫秒可能会出错)和多线程并行扫描使得扫描范围内所有 IP 的速度最快 5 秒。