public List<Device> devices = new Vector(); public static void main(String[] args) throws IOException, InterruptedException { Test test = new Test(); List<Device> rs = test.searchDevice(); } public List<Device> searchDevice() { List<String> ips = IPUtils.getIPByNet("10.10.10"); ThreadPoolExecutor executor = new ThreadPoolExecutor(5, 10, 5,TimeUnit.SECONDS, new LinkedBlockingDeque<Runnable>()); Iterator<String> it = ips.iterator(); while (it.hasNext()) { String ip = it.next(); executor.execute(new IPTask(devices, ip)); } return devices; }
public class IPTask implements Runnable { List<Device> devList; String ip; SearchDeviceService search; public IPTask(List<Device> devList, String ip) { this.devList = devList; this.ip = ip; search = SearchDeviceService.getInstance(); } @Override public void run() { Device tmp = search.Ping(ip); if (tmp != null) { synchronized (devList) { if (!devList.contains(tmp)) { System.out.println(Thread.currentThread().getId() + " " + tmp.toString()); devList.add(tmp); } } } } }
public class SearchDeviceService { private static SearchDeviceService instance; public static SearchDeviceService getInstance() { if (instance == null) { return new SearchDeviceService(); } return instance; } public Device Snmp(String ip) { Device info = new Device(); Address targetAddress = GenericAddress.parse("udp:" + ip + "/161"); CommunityTarget target = new CommunityTarget(); target.setCommunity(new OctetString(Config.COMMUNITY)); target.setAddress(targetAddress); target.setRetries(Config.RETRIES); target.setVersion(SnmpConstants.version2c); PDU pdu = new PDU(); pdu.add(new VariableBinding(new OID(SNMP.WINDOW_HOSTNAME))); try { ResponseEvent event = SNMP.getInstance().get(pdu, target); if (event != null && event.getResponse() != null) { Object localObject = event.getResponse().getVariableBindings(); for (int j = 0; j < ((Vector) localObject).size(); j++) { VariableBinding recVB = (VariableBinding) ((Vector) localObject).elementAt(j); info.setDeviceName(recVB.getVariable().toString()); info.setDeviceIP(ip); } } } catch (IOException e) { e.printStackTrace(); } return info; } public Device Ping(String ip) { Device info = null; try { Runtime run = Runtime.getRuntime(); Process localProcess = run.exec("ping -n 2 -w 1000 " + ip); BufferedReader localBufferedReader = new BufferedReader(new InputStreamReader(localProcess.getInputStream())); String str2 = localBufferedReader.readLine(); while (str2 != null) { if (str2.toUpperCase().contains("TTL=")) { InetAddress host = InetAddress.getByName(ip); info = new Device(); info.setDeviceName(host.getCanonicalHostName()); info.setDeviceIP(ip); } str2 = localBufferedReader.readLine(); } } catch (UnknownHostException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return info; } }
执行结果:
9 IP:10.10.10.1,name:10.10.10.1 9 IP:10.10.10.30,name:NPIE353B1 10 IP:10.10.10.150,name:ljw-PC 12 IP:10.10.10.153,name:Fisrt-PC 13 IP:10.10.10.165,name:10.10.10.165 11 IP:10.10.10.189,name:10.10.10.189 9 IP:10.10.10.190,name:10.10.10.190 13 IP:10.10.10.196,name:10.10.10.196 9 IP:10.10.10.199,name:PC-20130710QYPU 11 IP:10.10.10.201,name:10.10.10.201 12 IP:10.10.10.202,name:10.10.10.202 12 IP:10.10.10.210,name:10.10.10.210 11 IP:10.10.10.208,name:10.10.10.208 13 IP:10.10.10.212,name:10.10.10.212 9 IP:10.10.10.216,name:10.10.10.216 10 IP:10.10.10.234,name:10.10.10.234 11 IP:10.10.10.231,name:10.10.10.231 9 IP:10.10.10.243,name:10.10.10.243 13 IP:10.10.10.255,name:10.10.10.255 9 IP:10.10.10.253,name:10.10.10.253
首先创建一个Vector容器,存放数据,然后通过ThreadPoolExector创建线程管理;具体工作由IPTask开始;
Iptask中,负责接收当前要操作的ip信息,多线程,synchronized当然是必须的;
在service中,runtime执行ping命令,然后得到结果……
相关推荐
标题 "ping_thread_class.zip_WORKING_delphi ping_ping" 暗示了这是一个关于 Delphi 开发的网络组件,特别用于实现"Ping"功能。Ping 是一个网络诊断工具,用于检查网络连接是否可达,通常通过发送ICMP(Internet ...
标题“TX_H743_NETX_PING_OK.zip”表明这是一个与嵌入式系统相关的压缩文件,其中包含了针对STM32H743处理器、LAN8720以太网控制器以及ThreadX实时操作系统和NetX Duo网络协议栈的开发资源。这个工程可能是一个完整...
标题中的“Mult-ping.rar_VB程序Ping_ping_vb 多线程_vb多线程”揭示了这个压缩包文件包含了一个使用Visual Basic (VB)编程语言编写的程序,该程序实现了多线程的ping功能。多线程是并发处理多个任务的能力,这在...
thread = threading.Thread(target=ping_ip, args=(ip,)) threads.append(thread) thread.start() for thread in threads: thread.join() print("所有ping操作已完成") ``` 以上代码创建了两个线程,分别ping...
【标题】"ping_java_android_" 暗示我们讨论的是一个与Java和Android相关的项目,可能是一个应用或库,用于实现网络通信功能,特别是“ping”操作,这通常用于检查网络连接的可用性。 在Android平台上,Java是主要...
在Android平台上进行网络诊断时,"ping"命令是不可或缺的工具。它允许开发者或用户测试设备与特定IP地址之间的连通性,通过发送Internet控制消息协议(ICMP)回显请求来检查网络延迟和丢包情况。以下是关于"android ...
本示例讲解了如何利用Python的多线程功能来快速地对多个IP地址进行ping操作,以检查网络连通性。这个程序使用了`pexpect`库来执行系统命令,并通过`threading`库创建线程,实现并行ping。 首先,我们导入了所需的库...
- 测试网络连接,如通过ping命令检查STM32F4 Discovery开发板与计算机之间的网络连通性。 这个项目为初学者提供了一个实践网络通信的完整实例,有助于提升对嵌入式系统、实时操作系统和网络编程的理解。通过深入...
- 使用STM32CubeMX生成带系统的Lwip工程后,尝试使用Wireshark抓包工具进行调试,发现无法Ping通。 2. **配置细节**: - 在不使用FreeRTOS的情况下,只需在`main`函数的`while(1)`循环中加入`MX_LWIP_Process();`...
总的来说,"qt5多线程pingIP地址(线程池)"是一个结合了Qt5的多线程、线程池管理以及外部工具fping的实用应用程序,旨在高效地检查大量IP地址的网络连通性。通过合理的设计和实现,可以显著提升网络诊断的效率。
4. **Ping测试**:使用ping命令检查到远程主机的延迟,可以评估网络的响应时间。 5. **iperf工具**:iperf是一个通用的网络性能测试工具,支持TCP和UDP,可以在RT-Thread中移植使用,进行更详细的网速测试。 五、...
标题“rt_thread_stm32_enc28j60.rar”指的是一个针对STM32微控制器使用RT-Thread操作系统,并集成ENC28J60网络接口芯片的项目压缩包。这个压缩包可能包含了源代码、配置文件和其他相关资源,帮助开发者实现通过ENC...
t = threading.Thread(target=ping_IP, args=(IP_L,)) threads.append(t) for i in range(THREAD_NUM): threads[i].start() for i in range(THREAD_NUM): threads[i].join() ``` 上述代码首先根据用户输入确定...
在Windows编程领域,开发一个网络ping测试程序是常见的任务,用于检查网络连通性。"win-PingTest"项目提供了一个实用工具,帮助用户轻松测试多个网络节点的可达性。这个程序利用了Windows操作系统内建的ICMP...
它提供了一个轻量级内核,支持多线程、内存管理、定时器、中断服务等核心功能,同时也包含丰富的组件库,如网络协议栈、文件系统、图形用户界面等,为开发者提供了灵活的软件平台。 移植rt-thread到STM32H750的过程...
标题中的“自动ping网关程序”是指一种计算机应用程序,它能够自动执行ping命令来检查网络连接的稳定性,尤其是针对网关设备。网关是网络通信中的一个重要节点,它连接了两个不同的网络,使得数据能在这些网络之间...
标题“java实现ping.pdf”表明本文档内容与Java编程语言相关,特别是描述了一个实现网络诊断工具“ping”的Java程序。Ping工具主要用于测试数据包是否能够通过网络到达特定的主机,并测量往返时间(Round-Trip Time,...
这个压缩包"ping.7z"包含了一个C++实现的ping功能,为开发者提供了一种自定义网络连通性检测的方法。 首先,我们要理解C++编程语言在实现网络通信中的角色。C++是一种静态类型的、编译式的、通用的、大小写敏感的、...
在IT行业中,网络通信是不可或缺的一部分,而`ping`命令是一种简单却强大的网络诊断工具,用于测试网络连接的可达性和速度。在这个项目中,我们讨论的是一个使用C#编程语言实现的多线程`ping`程序,它可以同时对多个...