IP 地址扫描工具

import java.net.InetAddress;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;

/**
 * 端口扫描工具
 * 
 * @author czp
 * @version 1.0 (2013-5-17)
 */
public class NetUtil {

	private List<InetAddress> ls ;
	
	private  int port;
	
	private Socket sc;
	
	private String host;
	
	private int timeOut;
	
	public NetUtil(int port) {
		this.port = port;	
		this.timeOut = 500;
	}
	
	public NetUtil(String baseIp,int port,int timeOut) {
		this.port = port;
		this.host = baseIp;
		this.timeOut = timeOut;
	}


	/**
	 * 开始扫描
	 */
	public List<InetAddress> startScan()
	{
		try {
			InetAddress it = null;
			if(host==null)
			{
				 it = InetAddress.getLocalHost();
			}else{
				it = InetAddress.getByName(host);
			}
			long st = System.currentTimeMillis();
			sc = new Socket();
			ls = new CopyOnWriteArrayList<InetAddress>();
			int process = Runtime.getRuntime().availableProcessors()+1;
			ExecutorService service = Executors.newFixedThreadPool(process);
			String hostAddress = it.getHostAddress();
			int lastIndexOf = hostAddress.lastIndexOf(".");
			String start =hostAddress.substring(0, lastIndexOf+1);
			int avg = 255/process;
			List<Future<List<InetAddress>>> fss = new ArrayList<Future<List<InetAddress>>>();
			for(int i=0;i<process;i++)
			{
				List<String> ipLs = new ArrayList<String>();
				for (int j =(i+1)*avg; j>i*avg; j--) {
					ipLs.add(start+j);
				}
				Future<List<InetAddress>> fs = service.submit(new ScanIp(ipLs));
				fss.add(fs);
			}
			for (Future<List<InetAddress>> future : fss) {
					ls.addAll(future.get());
			}
			service.shutdownNow();
			System.out.println("over times is "+(System.currentTimeMillis()-st));
		} catch (Exception e) {
			e.printStackTrace();
		}
		return ls;
	}
	
	private class ScanIp implements Callable<List<InetAddress>>{
		
		private  List<String> ips;
		
		
		private ScanIp(List<String> ips) {
			this.ips = ips;
		}

		@Override
		public List<InetAddress> call() throws Exception {
			List<InetAddress> canReachIp = new ArrayList<InetAddress>();
			for (String str : ips) {
				try {
					if(!Thread.interrupted())
					{
						InetAddress it = InetAddress.getByName(str);
						InetSocketAddress endpoint = new InetSocketAddress(it.getHostAddress(),port);
						sc.connect(endpoint,timeOut);
						if(sc.isConnected())
						{
							canReachIp.add(it);
							sc.close();
						}
					}else{
						ls.addAll(canReachIp);
					}
				}  catch (Exception e) {
				}
			}
			return canReachIp;
		}
		
	}
	
	public static void main(String[] args) {
		System.out.println(new NetUtil("192.168.128.181",80,500).startScan());
	}
}

提供了基于BP(Back Propagation)神经络结合PID(比例-积分-微分)控制策略的Simulink仿真模型。该模型旨在实对杨艺所著论文《基于S函数的BP神经络PID控制器及Simulink仿真》中的理论进行实践验证。在Matlab 2016b环境下开发,经过测试,确保能够正常运行,适合学习和研究神经络在控制系统中的应用。 特点 集成BP神经络:模型中集成了BP神经络用于提升PID控制器的性能,使之能更好地适应复杂控制环境。 PID控制优化:利用神经络的自学习能力,对传统的PID控制算法进行了智能调整,提高控制精度和稳定性。 S函数应用:展示了如何在Simulink中通过S函数嵌入MATLAB代码,实BP神经络的定制化逻辑。 兼容性说明:虽然开发于Matlab 2016b,但理论上兼容后续版本,可能会需要调整少量配置以适配不同版本的Matlab。 使用指南 环境要求:确保你的电脑上安装有Matlab 2016b或更高版本。 模型加载: 下载本仓库到本地。 在Matlab中打开.slx文件。 运行仿真: 调整模型参数前,请先熟悉各模块功能和输入输出设置。 运行整个模型,观察控制效果。 参数调整: 用户可以自由调节神经络的层数、节点数以及PID控制器的参数,探索不同的控制性能。 学习和修改: 通过阅读模型中的注释和查阅相关文献,加深对BP神经络与PID控制结合的理解。 如需修改S函数内的MATLAB代码,建议有一定的MATLAB编程基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值