很早前随手写的,欢迎提出更好的写法。
import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.InetSocketAddress; import java.net.Socket; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.concurrent.Callable; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; import java.util.concurrent.TimeUnit; public class IP_Connect_Mutil { public static void main(String[] args) throws Exception { IP_Connect_Mutil t = new IP_Connect_Mutil(); t.getAllReachableIP(8); } //数据来源:[@http://cb.e-fly.org:81/archives/goagent-iplist.html] //https://github.com/justjavac/Google-IPs public void getAllReachableIP(int subSize) throws Exception { OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream( "f:/saveFile/temp/google_ip9.txt"), "utf-8"); BufferedWriter bw = new BufferedWriter(osw); ExecutorService es = Executors.newFixedThreadPool(subSize); List<String> ipList = getTextIP("src/test.txt"); List<Future<String>> resultList = new ArrayList<Future<String>>(); int size = ipList.size(); for (int i = 0; i < subSize; i++) { PingTask ping = null; if (i == subSize - 1) { ping = new PingTask(ipList, (subSize - 1) * size / subSize + 1, size); } else { ping = new PingTask(ipList, i * size / subSize + (i > 0 ? 1 : 0), (i + 1) * size / subSize); } Future<String> future = es.submit(ping); resultList.add(future); } for (Future<String> future : resultList) { String result = future.get(); bw.write(result); bw.write("\r\n"); bw.flush(); } bw.close(); es.shutdown(); try { es.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS); } catch (InterruptedException e) { e.printStackTrace(); } } public List<String> getTextIP(String fileName) throws Exception { InputStreamReader ir = new InputStreamReader(new FileInputStream( fileName), "utf-8"); BufferedReader br2 = new BufferedReader(ir); String str = null; Set<String> resultList = new HashSet<String>(); while ((str = br2.readLine()) != null) { if (str.trim().length() == 0) { continue; } //以空格分割 String[] strArr = str.split("\\s+"); for (String sub : strArr) { if (sub.trim().length() > 0) { resultList.add(sub); } } } br2.close(); List<String> list = new ArrayList<String>(); list.addAll(resultList); return list; } } class PingTask implements Callable<String> { private List<String> ipList; private int startIndex; private int endIndex; public PingTask(List<String> ipList, int startIndex, int endIndex) { super(); this.ipList = ipList; this.startIndex = startIndex; this.endIndex = endIndex; System.out.println(ipList.size() + "---s=" + startIndex + "----e=" + endIndex); } public String call() throws Exception { StringBuffer sb = new StringBuffer(); for (int i = startIndex; i < endIndex; i++) { Socket socket = null; try { socket = new Socket(); socket.connect(new InetSocketAddress(ipList.get(i), 80), 5000); sb.append(' ').append(ipList.get(i)).append("\r\n"); } catch (Exception e) { System.err.println(String.format( "index=%s ip=%s not reachable", i, ipList.get(i))); } finally { if (socket != null) try { socket.close(); } catch (IOException e) { } } } return sb.toString(); } }
全文完
相关推荐
NULL 博文链接:https://53873039oycg.iteye.com/blog/2159102
有了这么一个管理器,平时可以将自己辛苦写出来的代码片段或算法记录下来。实际上这只是个支持语法着色的简单代码编辑器,带了一点文件管理功能。 更新日志在http://blog.sina.com.cn/s/blog_6204ca300100lh20.html...
精选的 PHP 代码片段可以让您在30秒内快速学习和了解 PHP 编程。这些精彩的片段涵盖了各种主题,从字符串操作到数组处理,再到文件操作和数据库连接,无所不包。只需阅读简短的代码示例,您就能快速掌握 PHP 的基础...
此均个人实践后,将原子化的代码片段,记录于此。日后简单拼接,更为实用。 创建:2020年4月5日。 更新:2020年4月5日。 1 目录及文件操作 1.1 遍历多层级目录 os.walk() ''' 注意:自带递归,无限遍历。每次的 ...
有了这么一个管理器,平时可以将自己辛苦写出来的代码片段或算法记录下来。实际上这只是个支持语法着色的简单代码编辑器,带了一点文件管理功能。 更新日志在http://blog.sina.com.cn/s/blog_6204ca300100lh20.html...
.neter在编码时,敲Try 然后连按两次Tab键盘,然后VisualStudio自动帮我们补上完整try语句的代码;在这个过程中,其实Visual Studio是调用了try.snippet代码片段。我们通过此工具可以编写属于自己的代码片段
根据自定义功能块配合代码片段来实现快捷输入以致对编程简单化、快捷化、标准化
DevChat 旨在超越简单的代码自动完成和对代码片段的有限操作。DevChat 为开发人员提供了一种非常实用和有效的方式来与大型语言模型 (LLM) 进行交互和协作。AI编码助手通过手动控制生效。没有过度的自动化,...
有时候,我们需要测试一些代码片段,而电脑中没有安装针对该语言的运行环境,没关系,你可以在线测试它们。 本文为你带来 8 款非常好用的代码片段在线工具,帮助你快速、方便地测试、编辑代码片段。 1. ideone ...
本文主要介绍了使用C#开发winform进行简单的模拟登陆抓取网页源码(注:本文只有重要片段代码!)
一个简单的react组件来编写代码片段 安装 npm install cn-react-coda 发展 测试 npm run test 建造 npm run build 皮棉 npm run lint 如何使用? import React from "react" import { Coda } from "cn-react-coda"...
Free Pascal AVR 微控制器代码片段、示例和库的集合。 结构 src 文件夹 垃圾桶 用于 avr 的 Linux-64 位编译的 gdb 8.0,包括用于调试程序内存的补丁。 例子 姓名 描述 眨眼1 一个使用繁忙延迟函数的简单闪烁示例...
我一直在各处使用的小片段和有用的代码片段。 太简单了,无法成为图书馆。 只需剪切并粘贴。 跨平台C / C ++。 公共区域。 片段 语 领域 C ++ ARC4流密码 C / C ++ 旧的assert()宏具有新的技巧 C atoi...
qmui-ios-codesnippets是一个QMUI团队日常工作中整理出来的Xcode的iOS通用代码片段集,其中也包含多个专用于iOS的QMUI框架的代码片段。 整理这个代码片段集的初衷有以下几点: 我们发现由于Xcode本身的功能不足,...
简单片段 简单片段的代码,简单的问答
片段 日常工作的简单代码片段
SEMCS:简单的嵌入式Markdown代码片段 用于从源文件中在Markdown文档中指定,生成和插入Markdown代码段的工具。 使用此工具,您可以根据Markdown文档中源文件中的函数名称指定代码段,并在输出文档中生成内联代码段...
抵制重构将带来技术麻烦:忘记代码片段的功能、创建无法测试的代码等等。 而有了重构,使用单元测试、共享代码以及更可靠的无BUG的代码这些最佳实践就显得简单多了。 《31天重构速成》该系列文章通过31个示例介绍了...
等等,通过简单设置组件的属性自动生成代码片段,默认使用的是最新版的jquery mobile 1.4.3版本。 jquery mobile代码助手包含了对JQuery Mobile中的所有组件属性的详细介绍。对于JQuery Mobile的初学者,可以通过...
适用于使用Electron&Vue.js构建的开发人员的简单代码段和要点管理器 :rocket: 总览 该项目的目的是通过提供一个非常酷的工具来使我们更加高效:一种用于代码的记事本 :grinning_face_with_big_eyes: :memo: 演示版 ...