用java语言实现网络主机存活扫描,要求该程序具有图形用户界面,给出完整源码,并且提示部分和注释部分用中文提示,给出详细的使用说明
时间: 2023-07-15 12:11:47 浏览: 78
以下是使用 Java 实现网络主机存活扫描的示例代码,包含图形用户界面和注释说明:
```java
import java.awt.BorderLayout;
import java.awt.EventQueue;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
public class NetworkScanner {
private JFrame frame;
private JTextArea textArea;
private JScrollPane scrollPane;
private JButton scanButton;
public static void main(String[] args) {
EventQueue.invokeLater(new Runnable() {
public void run() {
try {
NetworkScanner window = new NetworkScanner();
window.frame.setVisible(true);
} catch (Exception e) {
e.printStackTrace();
}
}
});
}
public NetworkScanner() {
initialize();
}
private void initialize() {
frame = new JFrame("网络主机存活扫描");
frame.setBounds(100, 100, 450, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
JPanel panel = new JPanel();
frame.getContentPane().add(panel, BorderLayout.SOUTH);
scanButton = new JButton("扫描");
scanButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
scan();
}
});
panel.add(scanButton);
textArea = new JTextArea();
textArea.setEditable(false);
scrollPane = new JScrollPane(textArea);
frame.getContentPane().add(scrollPane, BorderLayout.CENTER);
}
private void scan() {
// 获取本机 IP 地址的前缀
String localIP = getLocalIP();
String prefix = localIP.substring(0, localIP.lastIndexOf(".") + 1);
// 扫描局域网内的主机地址
List<String> hosts = new ArrayList<>();
for (int i = 1; i <= 255; i++) {
String host = prefix + i;
if (isHostAlive(host)) {
hosts.add(host);
}
}
// 输出扫描结果
if (hosts.isEmpty()) {
textArea.append("没有发现存活的主机。\n");
} else {
textArea.append("发现以下存活的主机:\n");
for (String host : hosts) {
textArea.append(host + "\n");
}
}
}
private String getLocalIP() {
try {
InetAddress address = InetAddress.getLocalHost();
return address.getHostAddress();
} catch (UnknownHostException e) {
return null;
}
}
private boolean isHostAlive(String host) {
try {
InetAddress address = InetAddress.getByName(host);
return address.isReachable(2000);
} catch (Exception e) {
return false;
}
}
}
```
使用说明:
1. 运行该程序,会弹出一个图形用户界面。
2. 点击“扫描”按钮开始扫描局域网内的主机地址。
3. 扫描完成后,程序会在文本框中输出扫描结果。
4. 如果没有发现存活的主机,则输出“没有发现存活的主机。”。
5. 如果发现存活的主机,则输出“发现以下存活的主机:”并列出每个存活的主机地址。
阅读全文