用JAVA去获取局域网中在线设备的需求,比如我的设备IP是192.168.1.3,我需要先判断是否在线这会你就会想到的是PING但是加上端口呢?比如我的设备IP是192.168.1.3:8080呢?根据IP加端口扫描;以下是我整理出来的解决方案:
/**
* @description: 获取设备在线状态
* @param networkSegment 网段 port 端口
* @return Map<String,Boolean>
* @author panlupeng
* @date 2022/3/22 16:19
*/
public static Map<String,Boolean> getDeviceOnLineStatus(String networkSegment,int port){
Map<String,Integer> map=new LinkedHashMap<>();
Map<String,Boolean> resultMap=new HashMap();
if(StringUtils.isEmpty(networkSegment)){
try{
networkSegment = InetAddress.getLocalHost().getHostAddress();
}catch (Exception e){
e.printStackTrace();
}
}
int lastPoint = networkSegment.lastIndexOf('.');
String ipHead = networkSegment.substring(0, ++lastPoint);
for (int num = 1; num < 255; num++) {
String ip = ipHead + String.valueOf(num);
map.put(ip,port);
}
if(!CollectionUtils.isEmpty(map)){
Iterator<Map.Entry<String, Integer>> entries = map.entrySet().iterator();
while(entries.hasNext()){
Map.Entry<String, Integer> entry = entries.next();
boolean pingIpAndPort = pingIpAndPort(entry.getKey(),entry.getValue());
System.out.println("IP为:"+entry.getKey()+",连接状态:"+pingIpAndPort);
resultMap.put(entry.getKey(),pingIpAndPort);
}
}
return resultMap;
}
/**
* @description: PING IP网络
* @param ip
* @return boolean
* @author panlupeng
* @date 2022/3/22 16:53
*/
public static boolean pingDeviceIp(String ip){
if(StringUtils.isEmpty(ip)){
return false;
}
if (!pingIp(ip)) {
return false;
}
int timeOut = 3000;
boolean reachable =false;
try{
reachable = InetAddress.getByName(ip).isReachable(timeOut);
}catch (Exception e){
e.printStackTrace();
}
return reachable;
}
/**
* ping ip
*
* @param ip
* @return
*/
public static boolean pingIp(String ip) {
if (null == ip || 0 == ip.length()) {
return false;
}
try {
InetAddress.getByName(ip);
return true;
} catch (IOException e) {
return false;
}
}
/**
* ping ip加端口
*
* @param ip
* @param port
* @return
*/
public static boolean pingIpAndPort(String ip, String port) {
if (null == ip || 0 == ip.length() || null == port || 0 == port.length() || !isInt(port) || !isRangeInt(port, 1024, 65535)) {
return false;
}
return pingIpAndPort(ip, Integer.parseInt(port));
}
/**
* 判断是否是整数
*
* @param str
* @return
*/
public static boolean isInt(String str) {
if (!isNumeric(str)) {
return false;
}
// 该正则表达式可以匹配所有的数字 包括负数
Pattern pattern = Pattern.compile("[0-9]+");
Matcher isNum = pattern.matcher(str); // matcher是全匹配
if (!isNum.matches()) {
return false;
}
return true;
}
/**
* 匹配是否包含数字
*
* @param str
* @return
*/
public static boolean isNumeric(String str) {
if (null == str || 0 == str.length()) {
return false;
}
if (str.endsWith(".")) {
return false;
}
// 该正则表达式可以匹配所有的数字 包括负数
Pattern pattern = Pattern.compile("-?[0-9]+\\.?[0-9]*");
Matcher isNum = pattern.matcher(str); // matcher是全匹配
if (!isNum.matches()) {
return false;
}
return true;
}
/**
* 是否在范围内
*
* @param str
* @param start
* @param end
* @return
*/
public static boolean isRangeInt(String str, int start, int end) {
if (!isInt(str)) {
return false;
}
int i = Integer.parseInt(str);
return i > start && i < end;
}
测试结果:
用JAVA PING IP 网络解决方案如下:
/**
* @description: PING IP网络
* @param ip
* @return boolean
* @author panlupeng
* @date 2022/3/22 16:53
*/
public static boolean pingDeviceIp(String ip){
if(StringUtils.isEmpty(ip)){
return false;
}
if (!pingIp(ip)) {
return false;
}
int timeOut = 3000;
boolean reachable =false;
try{
reachable = InetAddress.getByName(ip).isReachable(timeOut);
}catch (Exception e){
e.printStackTrace();
}
return reachable;
}
演示结果:
文章浏览阅读341次。spring-cloud-hystrix之spring-cloud-1.3.4(Dalston.SR3)-boot(1.5.6) 学习笔记概述hystrix可单独使用,也可与feign搭配使用,详见HystrixTargeter参考 https://fangjian0423.github.io/2017/02/19/springcloud-hystrix/http://blog.csdn.n_springcloud dalston.sr3怎么引用
文章浏览阅读991次。前言:在程序员的日常开发工作中,会遇到这样的情况,我们需要用自己本地的工作笔记本连接到大的服务器进行开发,因为大服务器的硬件性能强悍,有很多软件环境。我们在自己的笔记本进行开发需要用到这些软硬件环境,尤其在深度学习项目开发过程中,需要非常好的显卡,而显卡资源一般都部署在大服务器上。下面讲具体步骤:ssh和vscode的安装不再赘述,网上有很多教程。1,打开vscode编辑器,进入"扩展:商店":在搜索框里搜索Remote-SSH,下载好这个插件。2,点击左下角绿色部分"打开远程窗口",出现下图内容_ubuntu 通过 ssh 连接到远程服务器方便编辑代码的工具
文章浏览阅读3.2k次,点赞4次,收藏13次。概述GPU(Graphics Processing Unit) 图形处理单元,又称图形处理器,是我们所周知的显卡的核心部件,是显卡的“心脏”。按照字面意..._前台应用加速核心
文章浏览阅读4.3k次,点赞5次,收藏18次。本文详细介绍如何将串口通信将数据进行本次存储,主要介绍常用的csv、txt格式文件,由多年实战经验总结,绝对干货!_读取并保存串口发送来的数据
文章浏览阅读229次。对象锁:同步方法锁住的是对象A.一个对象+有多个synchronized方法:某一时刻内,只要有一个线程去调用其中一个synchronized 方法,其他的线程都要等待。B.一个对象中+synchronized方法+非synchronized方法:某个线程访问同步方法不影响其他线程访问非同步方法C.多个对象+多个同步方法:访问不同的对象的同步方法不会相互影响全局锁:静态同步方法锁的是当前的..._如果为put方法加synchronized锁,锁住的是什么?是一个put还是所有put方法?
文章浏览阅读2.5k次。最近有用户反馈在mac下通过airmail、outlook这样的邮件客户端查看系统发出邮件的标题显示为乱码,但是windows下正常。通过邮件客户端保存为eml,用sublime text 2打开,可以发现展示为以下效果:Date: Wed, 01 Jul 2015 19:54:57 +0800From: To: "=?GBK?B?zt6+zA==?=" Subject: [MTLÑз¢Ö§³Å..._outlook 2013 转发邮件 乱码
文章浏览阅读2.8k次,点赞86次,收藏44次。在这一小节中,重点要理解的就是组件的编程思想。组件表示页面中的部分功能(包含自己的逻辑与样式),可以组合多个组件实现完整的页面功能。问题是,如何确定页面中哪些内容划分到一个组件中呢?你可以将组件当作一种函数或者是对象来考虑(函数的功能是单一的),根据[单一功能原则]来判定组件的范围。也就是说,一个组件原则上只能负责一个功能。如果它需要负责更多的功能,这时候就应该考虑将它拆分成更小的组件。定义:组件是可复用的Vue实例,准确讲它是的实例,继承自Vue分类:有状态组件(有data属性),
文章浏览阅读7.1k次。Springer期刊 latex投稿经验分享_投期刊要求latex
文章浏览阅读192次。1制造业数字化工艺目标1) 通过PLM项目的实施能够理顺企...
文章浏览阅读3.7k次,点赞5次,收藏17次。文件包含漏洞详解_ctf 文件包含
文章浏览阅读970次。文章目录java占位符具体使用搭配转换符的标志java占位符拼接字符串显示十分麻烦,因此java中存在大量占位符用来规范输出诸如:String.format("0.5(-%d)+", i),类似c语言的printf方法,比“0.5(-”+…更加简洁易懂String类的format()方法具体使用format(String format, Object… args) 新字符串使用本地语言环境,制定字符串格式和参数生成格式化的新字符串。format(Locale locale, String fo_%x java
文章浏览阅读2.8k次,点赞34次,收藏48次。【深度学习基础】反向传播BP算法原理详解及实战演示(附源码)_反向传播算法