展开全部

下面是获得本机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地址查询功能的课程设计相关推荐

  1. java程序运行5步骤_浅析Java程序的执行过程

    一 .jdk内容概述 当安装好jdk后(本示例jdk版本为11.0.1,不同版本,目录有细微差别,但bin目录包含的exe是一样的),打开bin目录,有两个重要的exe文件:javac.exe(编译器 ...

  2. java程序员加班吗_作为java程序员,一定要加班才是好程序员吗?

    加班的java程序员不一定就是好的java程序员,不加班的java程序员不一定就是坏的java程序员,我们需要从工作态度.能力.责任心等等方面来综合的对java程序员的好坏进行分析. 一个好的java ...

  3. 编写java程序计算梯形面积_【Java】编写一个应用程序计算梯形和圆形的面积。...

    说明:这是武汉理工大学计算机学院[Java语言程序设计]课程实验1:编写一个应用程序计算梯形和圆形的面积. >>点击查看WUTer计算机专业实验汇总 谨记:纸上得来终觉浅,绝知此事要躬行. ...

  4. 简述java程序的工作过程_简述 Java 程序的开发过程。_学小易找答案

    [填空题]两个啮合齿轮在啮合区内,一个齿轮的轮齿用()绘制,另一个齿轮的轮齿被遮挡的部分用()绘制,被遮挡的部分也可以省略不画. [单选题]只有建立了统一的学校集体,才能在儿童的意识中唤起舆论的强大力 ...

  5. java程序中语句隔开_《Java语言程序设计》填空题.doc

    您所在位置:网站首页 > 海量文档 &nbsp>&nbsp计算机&nbsp>&nbspJava <Java语言程序设计>填空题.doc9页 ...

  6. 什么叫做java程序中的继承_【Java】基础16:什么叫继承?

    原标题:[Java]基础16:什么叫继承? 面向对象三大特性:封装,继承.多态. 继承用一句话总结就是:父亲可以有很多儿子,但儿子只能有一个亲爹. 继承描述的是事物之间的所属关系.看下图: 动物是一个 ...

  7. linux运行java程序内存过大_排查java应用linux环境内存占用过高的问题

    一.问题场景 在一个短信平台的项目中,设置了一个下发节点的Xmx为16G,但是出现了内存撑满,导致CPU过高的情况.当时的具体情况是,该应用内存占用16G,该应用CPU占用1400%(16核),服务器 ...

  8. 取 java 程序运行的路径_获取Java程序运行的路径 | 获取当前jar包的路径

    经过试验,不管是否是Jar包,不管是否是Tomcat部署,以下三个方法均可实现. package test; public class MyPath { public static String ge ...

  9. Java程序员女生性格_女java程序员真真伤不起

    各位筒子们,身为一个大学毕业三年的毕业狗来说,两年的工作还是没有让我这颗躁动的心安定下来,也是惭愧.大学学的英语师范,一个不尴不尬的专业,想着毕业后能做做翻译,高薪不累走上人生巅峰也是极好的,或者做做 ...

最新文章

  1. tableexport 文件格式和扩展名不匹配_好多公司都要用的一些知识点Office办公软件、文件加密、文件扩展名!...
  2. 怎么创建python django项目_创建Django项目图文实例详解
  3. 奈飞文化手册_《奈飞文化手册》速阅提炼分享4
  4. jdbc 连接 mysql 的字符串
  5. Atmospheric Scattering in Unity5
  6. IOS APP提交流程
  7. 微信html代码怎么换行,微信公众号代码区域换行问题(解决)
  8. guass白名单的配置命令
  9. mpp格式文件怎么打开,mpp进度计划
  10. Chrome浏览器乱码问题
  11. python3识别图中的文字_Python3调用百度AI识别图片中的文字功能示例【测试可用】...
  12. __ffs 源码分析
  13. '\0'和\0的区别
  14. 招聘网站代码模板 mysql_招聘网站爬虫模板
  15. 微信小程序 - 进阶(自定义组件、promis化、mobx、分包、自定义tabBar)
  16. 毕业一年,工作一年,有收获,有失去,有遗憾,但仍一往无前 (征文)
  17. Colossal-AI 分布式人工智能框架
  18. Windows 配置Maven仓库
  19. 阿里云部署IPv4IPv6 双栈环境
  20. 爱心动画python_Python爱心动画GIF

热门文章

  1. 大数据系列修炼-Scala课程07
  2. javascript工具类(util)-持续更新
  3. 设计模式之美:Facade(外观)
  4. 不要对对象进行粗暴的等号赋值
  5. 保护 ASP.NET 会话状态
  6. nmap 获取主机名
  7. linux net.ipv4.ip_forward 数据包转发
  8. 深度包检测 DPI 介绍
  9. python3 mysql错误 pymysql.err.OperationalError: (2013, 'Lost connection to MySQL server during query')
  10. centos7 tmp目录 自动清理规则