package ui;
import ui.config.PrintStreamToGUI;
import ui.thread.OutputResultThread;
import ui.thread.SearchThread;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.io.IOException;
import java.util.concurrent.ConcurrentLinkedDeque;
public class Main {
public static PrintStreamToGUI consoleToGUI;
public static ConcurrentLinkedDeque<String> IPS = new ConcurrentLinkedDeque<>(); //用于组合框
public static JComboBox jcb; //组合框,需要时常更新
public static JButton searchButton;
public static void main(String[] args) {
JFrame frame = new JFrame();
frame.setTitle("FTP Search Engine"); //设置窗口标题
frame.setSize(800, 700); //设置窗口大小
frame.setLocationRelativeTo(null);//设置窗口居中显示
frame.setResizable(false);//设置不可调整大小
frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);//设置窗口关闭时程序结束
/*
* 输入组件
*/
JPanel inputPanel = new JPanel();
placeInputComponents(inputPanel);
/*
* 输出组件
*/
JPanel outputListPanel = new JPanel();
placeOutputComponents(outputListPanel);
JScrollPane scrollPanel = new JScrollPane();
//设置滚动条面板位置和大小
scrollPanel.setBounds(5,180,775,450);
/*将普通面板嵌入带滚动条的面板,所在位置由后者决定*/
scrollPanel.getViewport().add(outputListPanel);
frame.add(scrollPanel);
frame.add(inputPanel);
frame.setVisible(true);//设置窗口可见
}
private static void placeOutputComponents(JPanel panel) {
panel.setLayout(new BorderLayout());//让JTextArea平铺整个JPanel
//结果输出
JTextArea area = new JTextArea();
area.setEditable(false);
Font font=new Font("Arial Unicode MS",Font.PLAIN,16);
area.setFont(font);
panel.add(area);
/*
* 控制台结果转换到swing
*/
consoleToGUI = new PrintStreamToGUI(System.out, area);
System.setOut(consoleToGUI);
System.setErr(consoleToGUI);
}
private static void placeInputComponents(JPanel panel) {
panel.setLayout(null);
/*
* 创建文本域用于用户输入 StartIP
*/
JLabel startIPLabel = new JLabel("StartIP :");
startIPLabel.setBounds(50,20,80,25);
panel.add(startIPLabel);
JTextField inputStartIP = new JTextField(20);
inputStartIP.setBounds(120,20,120,25);
panel.add(inputStartIP);
/*
* 创建文本域用于用户输入 EndIP
*/
JLabel endIPLabel = new JLabel("EndIP :");
endIPLabel.setBounds(50,50,80,25);
panel.add(endIPLabel);
JTextField inputEndIP = new JTextField(20);
inputEndIP.setBounds(120,50,120,25);
panel.add(inputEndIP);
/*
* 创建文本域用于用户输入 EndIP
*/
JLabel portNumLabel = new JLabel("PortNum :");
portNumLabel.setBounds(50,80,80,25);
panel.add(portNumLabel);
JTextField inputPortNum = new JTextField(20);
inputPortNum.setBounds(120,80,60,25);
inputPortNum.setText("10000");
inputPortNum.setEnabled(true);
panel.add(inputPortNum);
/*
* 创建单选框选择搜索方案
*/
JRadioButton planA = new JRadioButton("Plan A:NIO+多线程,两个线程同步执行。 (消耗大,不稳定)");
planA.setBounds(300,15,500,25);
JRadioButton planB = new JRadioButton("Plan B:NIO+多线程,使用线程池,每个线程使用NIO处理多个连接。2000_per");
planB.setBounds(300,48,500,25);
JRadioButton planC = new JRadioButton("Plan C:使用多线程,BIO模式,每个线程处理一个连接。(速度快,内存消耗大)");
planC.setBounds(300 ,80,500,25);
planC.setSelected(true);
ButtonGroup group = new ButtonGroup();
group.add(planA);group.add(planB);group.add(planC);
panel.add(planA);panel.add(planB);panel.add(planC);
// 创建搜索按钮
searchButton = new JButton("Search");
searchButton.setBounds(200, 125, 120, 30);
panel.add(searchButton);
//显示消耗时间
JLabel timeLabel = new JLabel("Spend Time : 0.000 s");
timeLabel.setBounds(50,130,200,25);
panel.add(timeLabel);
//创建组合框
JLabel jcbLabel = new JLabel("可连接IP : ");
jcbLabel.setBounds(350,130,80,25);
panel.add(jcbLabel);
jcb = new JComboBox(IPS.toArray(new String[0]));
jcb.setBackground(Color.white);
jcb.setBounds(420,130,150,25);
panel.add(jcb);
JButton connectButton = new JButton("Connect");
connectButton.setBounds(580, 125, 120, 30);
panel.add(connectButton);
inputStartIP.setText("172.16.1.1");
inputEndIP.setText("172.16.255.255");
/*
* Search点击事件
*/
searchButton.addActionListener((ActionEvent e) -> {
searchButton.setEnabled(false);
consoleToGUI.clear();
String startIP = inputStartIP.getText();
String endIP = inputEndIP.getText();
int portNum = Integer.parseInt(inputPortNum.getText().equals("")? "0" : inputPortNum.getText());
/*
* 输入校验
*/
if (startIP.equals("")) {
JOptionPane.showMessageDialog(null, "请输入起始IP");
return;
}
else if (endIP.equals("")) {
JOptionPane.showMessageDialog(null, "请输入结束IP");
return;
}
else if (portNum == 0) {
JOptionPane.showMessageDialog(null, "开设端口数不能为0");
return;
}
if (startIP.split("\\.").length != 4) {
JOptionPane.showMessageDialog(null, "起始IP输入错误");
return;
}
else if (endIP.split("\\.").length != 4) {
JOptionPane.showMessageDialog(null, "结束IP输入错误");
return;
}
String plan = null;
if (planA.isSelected()) plan = "A";
else if (planB.isSelected()) plan = "B";
else if (planC.isSelected()) plan = "C";
/*
开始搜索
*/
OutputResultThread outputResultThread = new OutputResultThread();
outputResultThread.start();
new SearchThread(plan, startIP, endIP, portNum, timeLabel, outputResultThread).start();
});
/*
* Connect 点击事件
*/
connectButton.addActionListener((ActionEvent e)->{
if (jcb.getSelectedItem() == null) {
JOptionPane.showMessageDialog(null, "请选择可用IP地址");
return;
}
try {
Runtime.getRuntime().exec("explorer ftp://" + jcb.getSelectedItem());
} catch (IOException ioException) {
ioException.printStackTrace();
}
});
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
FTP站点搜索引擎GUI FTP站点搜索引擎GUI 使用NIO,多线程。 参数说明, startIP 表示搜索的起始IP endIP 表示搜索的终止IP PortNum:表示本机最大临时端口数量。(越高搜索越快)
资源推荐
资源详情
资源评论
收起资源包目录
FTPSearchEngine-main.zip (24个子文件)
FTPSearchEngine-main
pom.xml 979B
src
test
java
TestPlanA.java 620B
TestPlanB.java 590B
TestPlanC.java 609B
main
java
engine
planB
StarterPlanB.java 2KB
EngineConfigPlanB.java 419B
task
NIOSearchTask.java 4KB
AbstractEngineConfig.java 792B
FTPSearchEngineApplication.java 662B
AbstractStarter.java 190B
utils
IPUtil.java 3KB
nio
FTPNIOClient.java 556B
planC
StarterPlanC.java 1KB
task
SearchTask.java 628B
EngineConfigPlanC.java 482B
planA
EngineConfigPlanA.java 360B
task
NIOHandleTask.java 3KB
NIOConnectTask.java 2KB
StarterPlanA.java 2KB
ui
thread
SearchThread.java 1KB
OutputResultThread.java 2KB
Main.java 7KB
config
PrintStreamToGUI.java 896B
FTP-search-enginee-final.iml 931B
共 24 条
- 1
资源评论
博士僧小星
- 粉丝: 1934
- 资源: 5894
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功