很早前随手写的,欢迎提出更好的写法。
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(); } }
全文完
相关推荐
【标题】"代码片段_3"的描述简短,但我们可以从中推测这可能是一个关于编程或软件开发的简单代码示例。"博文链接:https://53873039oycg.iteye.com/blog/2159102" 提供了更详细信息的来源,这是一个在ITEYE博客上的...
例如,以下是一个简单的C语言代码片段定义,用于创建一个函数声明: ```json { "函数声明": { "prefix": "funcdecl", "body": [ "void ${1:functionName}( ${2:params} ) {", "\t$0", "}" ], "description...
有了这么一个管理器,平时可以将自己辛苦写出来的代码片段或算法记录下来。实际上这只是个支持语法着色的简单代码编辑器,带了一点文件管理功能。 更新日志在http://blog.sina.com.cn/s/blog_6204ca300100lh20.html...
在这个项目中,可能通过比较不同代码片段的结构、语法或逻辑来确定它们的相似性。常见的方法包括基于字符串匹配的简单比对、抽象语法树(AST)比较、词法分析以及更为复杂的机器学习算法。 "unionecb"可能是一种...
这个程序的主要目的是帮助用户有效地管理和存储他们的VB代码片段,解决在日常编程中容易遗忘或找不到特定代码的问题。 【描述详解】 描述指出这是一个“简单的VB代码管理小程序”。这暗示了该应用可能具有以下特性...
从给定的文件信息中,我们可以提炼出一系列关于jQuery的重要知识点,这50个代码片段不仅展示了jQuery的强大功能,还提供了实用的编程技巧,适用于各种JavaScript项目。以下是对部分代码片段的详细解释: ### 1. ...
- 一个简单的代码片段示例如下: ```json "mySnippet": { "scope": "javascript", "prefix": "log", "body": ["console.log('$1');", "$0"], "description": "打印日志" } ``` - 其中,`scope` 指定适用的...
精选的 PHP 代码片段可以让您在30秒内快速学习和了解 PHP 编程。这些精彩的片段涵盖了各种主题,从字符串操作到数组处理,再到文件操作和数据库连接,无所不包。只需阅读简短的代码示例,您就能快速掌握 PHP 的基础...
下面将详细解析这8个经典JS代码片段,它们涵盖了常见的问题解决策略,有助于提升开发者在实际项目中的技能。 1. **数组去重** 在JavaScript中,数组去重是一个常见的需求。一种简单的方法是使用ES6新增的Set数据...
综上所述,GistPal是一款针对Mac用户的理想代码片段管理工具,结合了GitHub的强大功能,让代码分享和管理变得既简单又高效。通过下载并安装`GistPal.app`,你就能立即开始使用这个强大的工具来优化你的开发流程。
Carbon是一款开源项目,它允许开发者将代码片段转换成高质量、美观的图片,使得分享和展示代码变得更加专业且吸引眼球。这个工具特别适合那些希望在社交媒体、博客或文档中以更优雅方式呈现代码的人。 Carbon的核心...
这个"utools的按键监听代码片段.zip"文件显然包含了用于utools平台的一个插件,该插件专注于监听并响应用户的回车键事件。下面我们将深入探讨这个主题。 在编程中,监听键盘事件是常见的交互设计,特别是在桌面应用...
这个特定的VS Code扩展——xabikos-vscode-react,是专门为React开发设计的,提供了许多方便的代码片段,帮助开发者快速编写React组件和其他相关代码。 首先,让我们深入了解React.js。React使用组件化思想,允许...
"matlab_代码查询"标签表明了该文档可能包含了代码查询机制,可能是通过分类、搜索功能,使得用户能快速找到特定的代码片段。这在解决实际问题时非常有用,尤其是当用户需要实现某个特定功能但不确定具体应该如何...
此均个人实践后,将原子化的代码片段,记录于此。日后简单拼接,更为实用。 创建:2020年4月5日。 更新:2020年4月5日。 1 目录及文件操作 1.1 遍历多层级目录 os.walk() ''' 注意:自带递归,无限遍历。每次的 ...
代码片段可能包括简单的输出示例、条件判断和循环逻辑,以及类的定义和实例化。 2. **面向对象编程**:C#是面向对象的语言,涉及到继承、封装、多态等概念。代码片段可能涵盖接口实现、抽象类的使用、继承与派生、...
以上就是7个重要的 jQuery 代码片段,涵盖了打印页面、输入框提示、全选/取消全选复选框、禁用右键点击、淡入淡出效果、回到顶部功能以及 AJAX 表单提交等常见任务的解决方案。学习并掌握这些代码片段,将有助于提升...
尽管它常因简单易学而被批评其语法不够严谨,但其简易性和高效率帮助了无数开发人员在短时间内上手开发。本文分享的10个PHP代码片段,涉及黑名单过滤、随机颜色生成、文件下载等多个方面,能极大提高开发效率和解决...
通常,可以通过HBuilder的“代码片段管理器”进行导入,然后在编写代码时,通过触发词或快捷键调用相应的代码片段。 总的来说,这个资源集合为HBuilder用户提供了全面的工具,使得在开发ThinkPHP项目时能够更加流畅...
使用自定义代码片段非常简单,只需要在编辑器中输入 prefix,然后选择自定义代码片段,回车后,自动插入对应的代码。 总结 本文介绍了 Visual Studio 中自定义代码片段的方法,包括配置自定义代码片段和使用自定义...