题目要求:
1.编程作业,要求用一种自己擅长的语言实现ip地址的获取,及其详细信息的显示,要求用窗口显示。
2.生成GIF动态演示图片,要求先演示程序目录结构与内容,然后以程序源码为背景,演示软件运行过程。
3.最后提交的软件以绿色软件的形式提交,具体为两种形式:
--a)压缩文件:运行文件(如nicinfo.exe)+ 各种运行所需要文件(如xxx.dll)够成的压缩包,解压可以直接运行,不需要安装任何软件或插件;
--b)单一运行文件:利用相关工具将原有的可执行程序和所需要各种资源文件打包成一个可直接运行于Windows或Linux平台的单一文件。
一.编写函数
我采用的语言是java,由于涉及到窗口的创建,所以java书第九章的知识很重要,把其中的关键要点掌握下来。又由于要获取主机信息和ip信息,这方面的知识不会,只有求助于百度了。完成情况基本如下:
代码:
main.java
package IP1;
/**
* @author JavaAlpha
* @date 2011-12-14
* @version V 1.0 java代码 调用dos的ipconfig /all 命令,获取网卡详细信息
*/
import java.awt.*;
import java.awt.event.*;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import java.io
.BufferedReader;
import java.io
.IOException;
import java.io
.InputStreamReader;
public class main {
public static void main(String[] args){
String hostName = getLocalMachineInfo("主机名 . . . . . . . . . . . . . :");
JFrame f=new JFrame("网卡信息");
Label la=new Label("用户名称;");
la.setBounds(10, 10, 100, 30);
la.setFont(new Font("宋体", Font.BOLD,20));
f.add(la);
JComboBox comboBox=new JComboBox();
comboBox.addItem("请选择用户");
comboBox.addItem(hostName);
comboBox.setBounds(115, 10, 200, 30);
comboBox.setFont(new Font("宋体", Font.BOLD,20));
f.add(comboBox);
JButton button=new JButton("详细");
button.setFont(new Font("宋体", Font.BOLD,20));
button.setBounds(320,10,90,30);
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
String item=(String)comboBox.getSelectedItem();
if(hostName.equals(item)){
new xiangxi();}
}
});
f.add(button);
f.setLayout(null);
f.setSize(500,300);
f.setLocation(300,200);
f.setVisible(true);
}
static String getLocalMachineInfo(String str) {
String line = "";
int n;
try {
Process ps = Runtime.getRuntime().exec("cmd /c ipconfig /all");
BufferedReader br = new BufferedReader(new InputStreamReader(ps.getInputStream()));
while (null != (line = br.readLine())) {
if (line.indexOf(str) != -1) { // 在line字符串中 查找str出现的位置,str即上面的字符串
n = line.indexOf(":");
line = line.substring(n + 2); // 获得 :后面的数据;
break;
}
}
ps.waitFor();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return line; // 返回数据
}
}
xiangxi.java
package IP1;
import java.awt.*;
import java.awt.event.*;
import javax.swing.JFrame;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class xiangxi {
public xiangxi()
{
// 获取机器名
String hostName = getLocalMachineInfo("主机名 . . . . . . . . . . . . . :");
// 获取网卡型号
String desc = getLocalMachineInfo("描述. . . . . . . . . . . . . . . :");
// 获取MAC地址
String mac = getLocalMachineInfo(" 物理地址. . . . . . . . . . . . . :");
// 获取IP地址
String ip = getLocalMachineInfo(" IPv4 地址 . . . . . . . . . . . . :");
// 获取子网掩码
String subnetMask = getLocalMachineInfo(" 子网掩码 . . . . . . . . . . . . :");
// 获取默认网关
String defaultGateway = getLocalMachineInfo(" 默认网关. . . . . . . . . . . . . :");
// 获取DNS服务器
String DNSServers = getLocalMachineInfo("DNS 服务器 . . . . . . . . . . . :");
JFrame f = new JFrame("ip信息");
Label la = new Label("机器名:" + hostName);
la.setBounds(10, 10, 500, 30);
la.setFont(new Font("宋体", Font.BOLD,20));
f.add(la);
Label lb = new Label("网卡信息:" + desc);
lb.setBounds(10, 50, 500, 30);
lb.setFont(new Font("宋体", Font.BOLD,20));
f.add(lb);
Label lc = new Label("MAC地址:" + mac);
lc.setBounds(10, 90, 500, 30);
lc.setFont(new Font("宋体", Font.BOLD,20));
f.add(lc);
Label ld = new Label("IP地址:" + ip);
ld.setBounds(10, 130, 500, 30);
ld.setFont(new Font("宋体", Font.BOLD,20));
f.add(ld);
Label le = new Label("子网掩码:" + subnetMask);
le.setBounds(10, 170, 500, 30);
le.setFont(new Font("宋体", Font.BOLD,20));
f.add(le);
Label lf = new Label("默认网关:" + defaultGateway);
lf.setBounds(10, 210, 500, 30);
lf.setFont(new Font("宋体", Font.BOLD,20));
f.add(lf);
Label lg = new Label("Dns服务器:" + DNSServers);
lg.setBounds(10, 250, 500, 30);
lg.setFont(new Font("宋体", Font.BOLD,20));
f.add(lg);
f.setLayout(null);
f.setSize(500, 400);
f.setLocation(300, 200);
f.setVisible(true);
}
static String getLocalMachineInfo(String str) {
String line = "";
int n;
try {
Process ps = Runtime.getRuntime().exec("cmd /c ipconfig /all");
BufferedReader br = new BufferedReader(new InputStreamReader(ps.getInputStream()));
while (null != (line = br.readLine())) {
if (line.indexOf(str) != -1) { // 在line字符串中
// 查找str出现的位置,str即上面的字符串
n = line.indexOf(":");
line = line.substring(n + 2); // 获得 :后面的数据;
break;
}
}
ps.waitFor();
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
return line; // 返回数据
}
}
二,心得与体会
本次作业技术难度有点高,对于知识的掌握比较细,使我对于Java图形用户界面的知识掌握加深,也让我了解了关于访问系统信息的相关知识。相信每一次的作业都能让我取得进步。