用java程序编写ip仿真器_用java 编写一个可以实现IP地址查询功能的课程设计
展开全部
下面是获得本机IP地址的方法,跟你的程序捆绑起来,互相发送消息的时候直接将IP发送过去
private static String[] getAllLocalHostIP(){
32313133353236313431303231363533e78988e69d8331333335316462 List res=new ArrayList();
Enumeration netInterfaces;
try {
netInterfaces = NetworkInterface.getNetworkInterfaces();
InetAddress ip = null;
while (netInterfaces.hasMoreElements()) {
NetworkInterface ni = (NetworkInterface) netInterfaces.nextElement();
Enumeration nii=ni.getInetAddresses();
while(nii.hasMoreElements()){
ip = (InetAddress) nii.nextElement();
if (ip.getHostAddress().indexOf(":") == -1) {
res.add(ip.getHostAddress());
}
}
}
} catch (SocketException e) {
e.printStackTrace();
}
return (String[])res.toArray(new String[0]);
}
这是个扫描局域网ip的windows解决方案,在unix系统下可能有问题
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.ArrayList;
public class LanIP {
public ArrayList getLanIPArrayList() {
ArrayList arrayIP = null;
try {
InitSystem initSystem = null;
initSystem = new InitSystem();
Thread thread = new Thread(initSystem);
thread.start();
thread.join();
arrayIP = initSystem.getArrayIPUsed();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (InterruptedException e) {
e.printStackTrace();
}
return arrayIP;
}
private class InitSystem implements Runnable {
private int firstIP = 2;// 查询的 IP 地址的最后一位起始点
private int lastIP = 255;// 查询的 IP 地址的最后一位结束点
private volatile ArrayList arrayThread;// 子线程段
private final int MAXTHREADNUM = 30; // 最大同时进行的子线程数量
private int threadNumNow;// 当前正在进行的子线程数量
private volatile ArrayList arrayIP;// 局域网查询所有可能的 IP 地址的结果集
private volatile ArrayList arrayIPUsed;// 局域网查询已经使用的 IP 地址的结果集
private InitSystem(String ip) {
arrayIP = new ArrayList();
arrayIPUsed = new ArrayList();
arrayThread = new ArrayList();
setIPAddressList(ip);
}
private InitSystem() throws UnknownHostException {
this(InetAddress.getLocalHost().getHostAddress());
}
private synchronized ArrayList getArrayIPUsed() {
try {
while (arrayIP.size() > 0) {
Thread.sleep(300);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
return arrayIPUsed;
}
private void setIPAddressList(String ip) {
// 根据这个 ip 地址查询它所在的局域网的所有可能 IP 地址的集合
int lastPointIndex = ip.lastIndexOf('.');
String stringIPHead = ip.substring(0, ++lastPointIndex);
String stringIP = null;
for (int i = firstIP; i <= lastIP; i++) {
stringIP = stringIPHead + i;
arrayIP.add(stringIP);
}
}
public void run() {
synchronized (this) {
try {
while (arrayIP.size() > 0) {
while (threadNumNow >= MAXTHREADNUM) {
for (Thread thread : arrayThread) {
if (!thread.getState().equals(
Thread.State.TERMINATED)) {
thread.join(5);
}
--threadNumNow;
}
arrayThread = new ArrayList();
}
Thread thread = new Thread(new InnerClass(arrayIP
.remove(0)));
thread.start();
threadNumNow++;
arrayThread.add(thread);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
private class InnerClass implements Runnable {
// 线程查询一个 IP 是否是可以连接的 是则加入到相应的 IP 数组
private String ip;
private InnerClass(String ip) {
this.ip = ip;
}
private boolean isUsedIPAddress(String ip) {
synchronized (this) {
// 判断这个 IP 地址在当前局域网中是否是可连接的 IP
Process process = null;
BufferedReader bufReader = null;
String bufReadLineString = null;
try {
process = Runtime.getRuntime().exec(
"ping " + ip + " -w 100 -n 1");
bufReader = new BufferedReader(new InputStreamReader(
process.getInputStream()));
for (int i = 0; i < 6 && bufReader != null; i++) {
bufReader.readLine();
}
bufReadLineString = bufReader.readLine();
if (bufReadLineString == null) {
process.destroy();
return false;
}
if (bufReadLineString.indexOf("timed out") > 0
|| bufReadLineString.length() < 17
|| bufReadLineString.indexOf("invalid") > 0) {
process.destroy();
return false;
}
} catch (IOException e) {
e.printStackTrace();
}
process.destroy();
return true;
}
}
public void run() {
synchronized (this) {
if (isUsedIPAddress(ip)) {
arrayIPUsed.add(ip);
}
}
}
}
}
}
追问
你好,为什么我把上面的扫描局域网ip的windows解决方案的代码写下来之后,运行的结果还是显示本机的IP地址,而我需要的是显示局域网当中存在的其他机器IP地址,求解答,谢谢
已赞过
已踩过<
你对这个回答的评价是?
评论
收起
用java程序编写ip仿真器_用java 编写一个可以实现IP地址查询功能的课程设计相关推荐
- java程序运行5步骤_浅析Java程序的执行过程
一 .jdk内容概述 当安装好jdk后(本示例jdk版本为11.0.1,不同版本,目录有细微差别,但bin目录包含的exe是一样的),打开bin目录,有两个重要的exe文件:javac.exe(编译器 ...
- java程序员加班吗_作为java程序员,一定要加班才是好程序员吗?
加班的java程序员不一定就是好的java程序员,不加班的java程序员不一定就是坏的java程序员,我们需要从工作态度.能力.责任心等等方面来综合的对java程序员的好坏进行分析. 一个好的java ...
- 编写java程序计算梯形面积_【Java】编写一个应用程序计算梯形和圆形的面积。...
说明:这是武汉理工大学计算机学院[Java语言程序设计]课程实验1:编写一个应用程序计算梯形和圆形的面积. >>点击查看WUTer计算机专业实验汇总 谨记:纸上得来终觉浅,绝知此事要躬行. ...
- 简述java程序的工作过程_简述 Java 程序的开发过程。_学小易找答案
[填空题]两个啮合齿轮在啮合区内,一个齿轮的轮齿用()绘制,另一个齿轮的轮齿被遮挡的部分用()绘制,被遮挡的部分也可以省略不画. [单选题]只有建立了统一的学校集体,才能在儿童的意识中唤起舆论的强大力 ...
- java程序中语句隔开_《Java语言程序设计》填空题.doc
您所在位置:网站首页 > 海量文档  > 计算机 > Java <Java语言程序设计>填空题.doc9页 ...
- 什么叫做java程序中的继承_【Java】基础16:什么叫继承?
原标题:[Java]基础16:什么叫继承? 面向对象三大特性:封装,继承.多态. 继承用一句话总结就是:父亲可以有很多儿子,但儿子只能有一个亲爹. 继承描述的是事物之间的所属关系.看下图: 动物是一个 ...
- linux运行java程序内存过大_排查java应用linux环境内存占用过高的问题
一.问题场景 在一个短信平台的项目中,设置了一个下发节点的Xmx为16G,但是出现了内存撑满,导致CPU过高的情况.当时的具体情况是,该应用内存占用16G,该应用CPU占用1400%(16核),服务器 ...
- 取 java 程序运行的路径_获取Java程序运行的路径 | 获取当前jar包的路径
经过试验,不管是否是Jar包,不管是否是Tomcat部署,以下三个方法均可实现. package test; public class MyPath { public static String ge ...
- Java程序员女生性格_女java程序员真真伤不起
各位筒子们,身为一个大学毕业三年的毕业狗来说,两年的工作还是没有让我这颗躁动的心安定下来,也是惭愧.大学学的英语师范,一个不尴不尬的专业,想着毕业后能做做翻译,高薪不累走上人生巅峰也是极好的,或者做做 ...
最新文章
- tableexport 文件格式和扩展名不匹配_好多公司都要用的一些知识点Office办公软件、文件加密、文件扩展名!...
- 怎么创建python django项目_创建Django项目图文实例详解
- 奈飞文化手册_《奈飞文化手册》速阅提炼分享4
- jdbc 连接 mysql 的字符串
- Atmospheric Scattering in Unity5
- IOS APP提交流程
- 微信html代码怎么换行,微信公众号代码区域换行问题(解决)
- guass白名单的配置命令
- mpp格式文件怎么打开,mpp进度计划
- Chrome浏览器乱码问题
- python3识别图中的文字_Python3调用百度AI识别图片中的文字功能示例【测试可用】...
- __ffs 源码分析
- '\0'和\0的区别
- 招聘网站代码模板 mysql_招聘网站爬虫模板
- 微信小程序 - 进阶(自定义组件、promis化、mobx、分包、自定义tabBar)
- 毕业一年,工作一年,有收获,有失去,有遗憾,但仍一往无前 (征文)
- Colossal-AI 分布式人工智能框架
- Windows 配置Maven仓库
- 阿里云部署IPv4IPv6 双栈环境
- 爱心动画python_Python爱心动画GIF
热门文章
- 大数据系列修炼-Scala课程07
- javascript工具类(util)-持续更新
- 设计模式之美:Facade(外观)
- 不要对对象进行粗暴的等号赋值
- 保护 ASP.NET 会话状态
- nmap 获取主机名
- linux net.ipv4.ip_forward 数据包转发
- 深度包检测 DPI 介绍
- python3 mysql错误 pymysql.err.OperationalError: (2013, 'Lost connection to MySQL server during query')
- centos7 tmp目录 自动清理规则