/** * * @author pquiring */ import javax.swing.*; import java.awt.*; import java.io.*; import java.net.*; import java.util.Arrays; public class NetApp extends javax.swing.JFrame { public static String version = "0.3"; /** * Creates new form NetApp */ public NetApp() { initComponents(); setTitle("Net Tools/" + version); centerWindow(this); latency = new int[latencyLabel.getWidth()]; } /** * This method is called from within the constructor to initialize the form. * WARNING: Do NOT modify this code. The content of this method is always * regenerated by the Form Editor. */ @SuppressWarnings("unchecked") // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents private void initComponents() { jTabbedPane1 = new javax.swing.JTabbedPane(); clientTab = new javax.swing.JPanel(); jPanel8 = new javax.swing.JPanel(); jLabel4 = new javax.swing.JLabel(); jLabel3 = new javax.swing.JLabel(); jLabel2 = new javax.swing.JLabel(); clientPort = new javax.swing.JTextField(); clientMode = new javax.swing.JComboBox(); clientHost = new javax.swing.JTextField(); jPanel9 = new javax.swing.JPanel(); clientStatus = new javax.swing.JLabel(); clientStart = new javax.swing.JButton(); jLabel5 = new javax.swing.JLabel(); upSpeed = new javax.swing.JTextField(); jLabel6 = new javax.swing.JLabel(); downSpeed = new javax.swing.JTextField(); jPanel10 = new javax.swing.JPanel(); latencyLabel = new javax.swing.JLabel() { public void paintComponent(Graphics g) { paintLatency(g); } }; clientStart2 = new javax.swing.JButton(); clientStatus2 = new javax.swing.JLabel(); jLabel15 = new javax.swing.JLabel(); latencyMaxEver = new javax.swing.JTextField(); jLabel16 = new javax.swing.JLabel(); latencyMaxWindow = new javax.swing.JTextField(); jPanel7 = new javax.swing.JPanel(); serverStatus = new javax.swing.JLabel(); serverPort = new javax.swing.JTextField(); serverStart = new javax.swing.JButton(); jLabel1 = new javax.swing.JLabel(); toolsTab = new javax.swing.JPanel(); jPanel5 = new javax.swing.JPanel(); jLabel8 = new javax.swing.JLabel(); pingHost = new javax.swing.JTextField(); pingStart = new javax.swing.JButton(); pingStatus = new javax.swing.JLabel(); jPanel6 = new javax.swing.JPanel(); jLabel7 = new javax.swing.JLabel(); dnsHost = new javax.swing.JTextField(); jLabel9 = new javax.swing.JLabel(); dnsResolve = new javax.swing.JButton(); dnsStatus = new javax.swing.JLabel(); jLabel11 = new javax.swing.JLabel(); dnsServer = new javax.swing.JTextField(); jScrollPane1 = new javax.swing.JScrollPane(); dnsIP = new javax.swing.JTextArea(); dnsType = new javax.swing.JComboBox(); jLabel12 = new javax.swing.JLabel(); jPanel3 = new javax.swing.JPanel(); checkipStart = new javax.swing.JButton(); jLabel13 = new javax.swing.JLabel(); jLabel14 = new javax.swing.JLabel(); internetIP = new javax.swing.JTextField(); intranetIP = new javax.swing.JTextField(); ipStatus = new javax.swing.JLabel(); jPanel1 = new javax.swing.JPanel(); jPanel2 = new javax.swing.JPanel(); jLabel10 = new javax.swing.JLabel(); fileFile = new javax.swing.JTextField(); fileSelect = new javax.swing.JButton(); fileStatus = new javax.swing.JLabel(); fileStart = new javax.swing.JButton(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); setTitle("Net Tools"); setResizable(false); jPanel8.setBorder(javax.swing.BorderFactory.createTitledBorder("Client")); jLabel4.setText("Mode"); jLabel3.setText("Port"); jLabel2.setText("Server"); clientPort.setText("33000"); clientMode.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "Full Duplex", "Send Only", "Receive Only" })); clientHost.setText("127.0.0.1"); jPanel9.setBorder(javax.swing.BorderFactory.createTitledBorder("Bandwidth Test")); clientStatus.setText("Idle"); clientStart.setText("Start"); clientStart.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { clientStartActionPerformed(evt); } }); jLabel5.setText("Upload Speed"); upSpeed.setEditable(false); jLabel6.setText("Download Speed"); downSpeed.setEditable(false); javax.swing.GroupLayout jPanel9Layout = new javax.swing.GroupLayout(jPanel9); jPanel9.setLayout(jPanel9Layout); jPanel9Layout.setHorizontalGroup( jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel9Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel9Layout.createSequentialGroup() .addComponent(clientStatus, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(clientStart)) .addGroup(jPanel9Layout.createSequentialGroup() .addComponent(jLabel5) .addGap(31, 31, 31) .addComponent(upSpeed)) .addGroup(jPanel9Layout.createSequentialGroup() .addComponent(jLabel6) .addGap(18, 18, 18) .addComponent(downSpeed, javax.swing.GroupLayout.DEFAULT_SIZE, 288, Short.MAX_VALUE))) .addContainerGap()) ); jPanel9Layout.setVerticalGroup( jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel9Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel5) .addComponent(upSpeed, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel6) .addComponent(downSpeed, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel9Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(clientStatus) .addComponent(clientStart)) .addContainerGap()) ); jPanel10.setBorder(javax.swing.BorderFactory.createTitledBorder("Latency Test")); latencyLabel.setBackground(new java.awt.Color(0, 0, 0)); latencyLabel.setBorder(javax.swing.BorderFactory.createLineBorder(new java.awt.Color(0, 0, 0))); clientStart2.setText("Start"); clientStart2.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { clientStart2ActionPerformed(evt); } }); clientStatus2.setText("Idle"); jLabel15.setText("Max (us)"); latencyMaxEver.setEditable(false); jLabel16.setText("Window Max (us)"); latencyMaxWindow.setEditable(false); javax.swing.GroupLayout jPanel10Layout = new javax.swing.GroupLayout(jPanel10); jPanel10.setLayout(jPanel10Layout); jPanel10Layout.setHorizontalGroup( jPanel10Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel10Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel10Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(latencyLabel, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(jPanel10Layout.createSequentialGroup() .addComponent(clientStatus2, javax.swing.GroupLayout.DEFAULT_SIZE, 325, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(clientStart2)) .addGroup(jPanel10Layout.createSequentialGroup() .addComponent(jLabel15) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(latencyMaxEver) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(jLabel16) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(latencyMaxWindow, javax.swing.GroupLayout.PREFERRED_SIZE, 102, javax.swing.GroupLayout.PREFERRED_SIZE))) .addContainerGap()) ); jPanel10Layout.setVerticalGroup( jPanel10Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel10Layout.createSequentialGroup() .addContainerGap() .addComponent(latencyLabel, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(jPanel10Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(clientStatus2) .addComponent(clientStart2)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel10Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel15) .addComponent(latencyMaxEver, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel16) .addComponent(latencyMaxWindow, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))) ); javax.swing.GroupLayout jPanel8Layout = new javax.swing.GroupLayout(jPanel8); jPanel8.setLayout(jPanel8Layout); jPanel8Layout.setHorizontalGroup( jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel8Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel8Layout.createSequentialGroup() .addGroup(jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabel2) .addComponent(jLabel3)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(clientHost) .addGroup(jPanel8Layout.createSequentialGroup() .addComponent(clientPort, javax.swing.GroupLayout.PREFERRED_SIZE, 88, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jLabel4) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(clientMode, javax.swing.GroupLayout.PREFERRED_SIZE, 152, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)))) .addComponent(jPanel9, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jPanel10, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addContainerGap()) ); jPanel8Layout.setVerticalGroup( jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel8Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel2) .addComponent(clientHost, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel8Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel3) .addComponent(clientPort, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(clientMode, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel4)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jPanel9, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jPanel10, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); jPanel7.setBorder(javax.swing.BorderFactory.createTitledBorder("Server")); serverStatus.setText("Idle"); serverPort.setText("33000"); serverStart.setText("Start"); serverStart.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { serverStartActionPerformed(evt); } }); jLabel1.setText("Port"); javax.swing.GroupLayout jPanel7Layout = new javax.swing.GroupLayout(jPanel7); jPanel7.setLayout(jPanel7Layout); jPanel7Layout.setHorizontalGroup( jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel7Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel7Layout.createSequentialGroup() .addComponent(jLabel1) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addComponent(serverPort, javax.swing.GroupLayout.PREFERRED_SIZE, 100, javax.swing.GroupLayout.PREFERRED_SIZE) .addGap(0, 0, Short.MAX_VALUE)) .addGroup(jPanel7Layout.createSequentialGroup() .addComponent(serverStatus, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(serverStart))) .addContainerGap()) ); jPanel7Layout.setVerticalGroup( jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel7Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel1) .addComponent(serverPort, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel7Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(serverStatus) .addComponent(serverStart)) .addContainerGap()) ); javax.swing.GroupLayout clientTabLayout = new javax.swing.GroupLayout(clientTab); clientTab.setLayout(clientTabLayout); clientTabLayout.setHorizontalGroup( clientTabLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(clientTabLayout.createSequentialGroup() .addContainerGap() .addGroup(clientTabLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jPanel8, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jPanel7, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addContainerGap()) ); clientTabLayout.setVerticalGroup( clientTabLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, clientTabLayout.createSequentialGroup() .addContainerGap() .addComponent(jPanel7, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jPanel8, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); jTabbedPane1.addTab("Bandwidth", clientTab); jPanel5.setBorder(javax.swing.BorderFactory.createTitledBorder("Ping")); jLabel8.setText("Host"); pingHost.setText("example.com"); pingStart.setText("Start"); pingStart.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { pingStartActionPerformed(evt); } }); pingStatus.setText("Idle"); javax.swing.GroupLayout jPanel5Layout = new javax.swing.GroupLayout(jPanel5); jPanel5.setLayout(jPanel5Layout); jPanel5Layout.setHorizontalGroup( jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel5Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel5Layout.createSequentialGroup() .addComponent(jLabel8) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(pingHost)) .addGroup(jPanel5Layout.createSequentialGroup() .addComponent(pingStatus, javax.swing.GroupLayout.DEFAULT_SIZE, 357, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(pingStart))) .addContainerGap()) ); jPanel5Layout.setVerticalGroup( jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel5Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel8) .addComponent(pingHost, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(jPanel5Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(pingStart) .addComponent(pingStatus)) .addContainerGap()) ); jPanel6.setBorder(javax.swing.BorderFactory.createTitledBorder("DNS")); jLabel7.setText("Host:"); dnsHost.setText("example.com"); jLabel9.setText("Result:"); dnsResolve.setText("Resolve"); dnsResolve.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { dnsResolveActionPerformed(evt); } }); dnsStatus.setText("Idle"); jLabel11.setText("Server:"); dnsServer.setText("8.8.8.8"); dnsIP.setEditable(false); dnsIP.setColumns(20); dnsIP.setRows(5); jScrollPane1.setViewportView(dnsIP); dnsType.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "A", "MX", "AAAA" })); jLabel12.setText("Type:"); javax.swing.GroupLayout jPanel6Layout = new javax.swing.GroupLayout(jPanel6); jPanel6.setLayout(jPanel6Layout); jPanel6Layout.setHorizontalGroup( jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel6Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel6Layout.createSequentialGroup() .addComponent(jLabel7) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(dnsHost) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jLabel12) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(dnsType, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addGroup(jPanel6Layout.createSequentialGroup() .addComponent(jLabel11) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(dnsServer)) .addGroup(jPanel6Layout.createSequentialGroup() .addComponent(jLabel9) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jScrollPane1)) .addGroup(jPanel6Layout.createSequentialGroup() .addComponent(dnsStatus, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(dnsResolve))) .addContainerGap()) ); jPanel6Layout.setVerticalGroup( jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel6Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel7) .addComponent(dnsHost, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(dnsType, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jLabel12)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel11) .addComponent(dnsServer, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jLabel9) .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 66, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel6Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(dnsStatus) .addComponent(dnsResolve)) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); jPanel3.setBorder(javax.swing.BorderFactory.createTitledBorder("Detect IP")); checkipStart.setText("Start"); checkipStart.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { checkipStartActionPerformed(evt); } }); jLabel13.setText("Internet IP:"); jLabel14.setText("Intranet IP:"); internetIP.setEditable(false); intranetIP.setEditable(false); ipStatus.setText("Idle"); javax.swing.GroupLayout jPanel3Layout = new javax.swing.GroupLayout(jPanel3); jPanel3.setLayout(jPanel3Layout); jPanel3Layout.setHorizontalGroup( jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel3Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel3Layout.createSequentialGroup() .addComponent(ipStatus, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(checkipStart)) .addGroup(jPanel3Layout.createSequentialGroup() .addComponent(jLabel13) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(internetIP)) .addGroup(jPanel3Layout.createSequentialGroup() .addComponent(jLabel14) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(intranetIP))) .addContainerGap()) ); jPanel3Layout.setVerticalGroup( jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, jPanel3Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel13) .addComponent(internetIP, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED) .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel14) .addComponent(intranetIP, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addGroup(jPanel3Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(checkipStart) .addComponent(ipStatus)) .addContainerGap()) ); javax.swing.GroupLayout toolsTabLayout = new javax.swing.GroupLayout(toolsTab); toolsTab.setLayout(toolsTabLayout); toolsTabLayout.setHorizontalGroup( toolsTabLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(toolsTabLayout.createSequentialGroup() .addContainerGap() .addGroup(toolsTabLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jPanel5, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jPanel6, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jPanel3, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addContainerGap()) ); toolsTabLayout.setVerticalGroup( toolsTabLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(toolsTabLayout.createSequentialGroup() .addContainerGap() .addComponent(jPanel5, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jPanel6, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jPanel3, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap(100, Short.MAX_VALUE)) ); jTabbedPane1.addTab("Tools", toolsTab); jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder("File Read Benchmark (SSD)")); jLabel10.setText("File:"); fileSelect.setText("Select..."); fileSelect.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { fileSelectActionPerformed(evt); } }); fileStatus.setText("Idle"); fileStart.setText("Start"); fileStart.addActionListener(new java.awt.event.ActionListener() { public void actionPerformed(java.awt.event.ActionEvent evt) { fileStartActionPerformed(evt); } }); javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2); jPanel2.setLayout(jPanel2Layout); jPanel2Layout.setHorizontalGroup( jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel2Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel2Layout.createSequentialGroup() .addComponent(jLabel10) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(fileFile, javax.swing.GroupLayout.DEFAULT_SIZE, 315, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(fileSelect)) .addGroup(jPanel2Layout.createSequentialGroup() .addComponent(fileStatus, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(fileStart))) .addContainerGap()) ); jPanel2Layout.setVerticalGroup( jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel2Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel10) .addComponent(fileFile, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(fileSelect)) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(fileStatus) .addComponent(fileStart)) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); jPanel1.setLayout(jPanel1Layout); jPanel1Layout.setHorizontalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addContainerGap() .addComponent(jPanel2, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addContainerGap()) ); jPanel1Layout.setVerticalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addContainerGap() .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addContainerGap(426, Short.MAX_VALUE)) ); jTabbedPane1.addTab("Misc", jPanel1); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jTabbedPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 475, javax.swing.GroupLayout.PREFERRED_SIZE) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jTabbedPane1) ); pack(); }// </editor-fold>//GEN-END:initComponents private void dnsResolveActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_dnsResolveActionPerformed if (dns == null) { dnsIP.setText(""); dns = new DNS(this, dnsServer.getText(), dnsHost.getText(), (String)dnsType.getSelectedItem()); dns.start(); dnsResolve.setText("Stop"); } else { dns.close(); dns = null; dnsResolve.setText("Resolve"); } }//GEN-LAST:event_dnsResolveActionPerformed private void pingStartActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_pingStartActionPerformed if (ping == null) { ping = new Ping(this, pingHost.getText()); ping.start(); pingStart.setText("Stop"); } else { ping.close(); ping = null; pingStart.setText("Start"); } }//GEN-LAST:event_pingStartActionPerformed private void serverStartActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_serverStartActionPerformed if (server == null) { serverStart.setText("Stop"); serverPort.setEnabled(false); server = new Server(this, Integer.valueOf(serverPort.getText())); server.start(); } else { server.close(); server = null; serverStart.setText("Start"); serverPort.setEnabled(true); serverStatus.setText("Idle"); } }//GEN-LAST:event_serverStartActionPerformed private void clientStartActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_clientStartActionPerformed startClientBandwidthTest(); }//GEN-LAST:event_clientStartActionPerformed private void fileStartActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_fileStartActionPerformed if (fileTest == null) { fileTest = new FileTest(this, fileFile.getText()); fileTest.start(); fileStart.setText("Stop"); fileFile.setEditable(false); } else { fileTest.close(); fileTest = null; fileStart.setText("Start"); fileFile.setEditable(true); } }//GEN-LAST:event_fileStartActionPerformed private void fileSelectActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_fileSelectActionPerformed JFileChooser chooser = new JFileChooser(); chooser.setFileSelectionMode(JFileChooser.FILES_ONLY); chooser.setMultiSelectionEnabled(false); chooser.setCurrentDirectory(new File(fileFile.getText())); if (chooser.showOpenDialog(this) != JFileChooser.APPROVE_OPTION) return; fileFile.setText(chooser.getSelectedFile().toString().replaceAll("\\\\", "/")); }//GEN-LAST:event_fileSelectActionPerformed private void checkipStartActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_checkipStartActionPerformed getIP(); }//GEN-LAST:event_checkipStartActionPerformed private void clientStart2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_clientStart2ActionPerformed startClientLatencyTest(); }//GEN-LAST:event_clientStart2ActionPerformed /** * @param args the command line arguments */ public static void main(String args[]) { boolean server = false; int port = 33000; if (args != null && args.length > 0) { for(int a=0;a<args.length;a++) { if (args[a].equals("-server")) { server = true; } else if (args[a].startsWith("-port=")) { port = Integer.valueOf(args[a].substring(6)); } } } if (server) { new Server(null, port).start(); return; } /* Create and display the form */ java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new NetApp().setVisible(true); } }); } // Variables declaration - do not modify//GEN-BEGIN:variables private javax.swing.JButton checkipStart; private javax.swing.JTextField clientHost; private javax.swing.JComboBox clientMode; private javax.swing.JTextField clientPort; private javax.swing.JButton clientStart; private javax.swing.JButton clientStart2; private javax.swing.JLabel clientStatus; private javax.swing.JLabel clientStatus2; private javax.swing.JPanel clientTab; private javax.swing.JTextField dnsHost; private javax.swing.JTextArea dnsIP; private javax.swing.JButton dnsResolve; private javax.swing.JTextField dnsServer; private javax.swing.JLabel dnsStatus; private javax.swing.JComboBox dnsType; private javax.swing.JTextField downSpeed; private javax.swing.JTextField fileFile; private javax.swing.JButton fileSelect; private javax.swing.JButton fileStart; private javax.swing.JLabel fileStatus; private javax.swing.JTextField internetIP; private javax.swing.JTextField intranetIP; private javax.swing.JLabel ipStatus; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel10; private javax.swing.JLabel jLabel11; private javax.swing.JLabel jLabel12; private javax.swing.JLabel jLabel13; private javax.swing.JLabel jLabel14; private javax.swing.JLabel jLabel15; private javax.swing.JLabel jLabel16; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel3; private javax.swing.JLabel jLabel4; private javax.swing.JLabel jLabel5; private javax.swing.JLabel jLabel6; private javax.swing.JLabel jLabel7; private javax.swing.JLabel jLabel8; private javax.swing.JLabel jLabel9; private javax.swing.JPanel jPanel1; private javax.swing.JPanel jPanel10; private javax.swing.JPanel jPanel2; private javax.swing.JPanel jPanel3; private javax.swing.JPanel jPanel5; private javax.swing.JPanel jPanel6; private javax.swing.JPanel jPanel7; private javax.swing.JPanel jPanel8; private javax.swing.JPanel jPanel9; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JTabbedPane jTabbedPane1; private javax.swing.JLabel latencyLabel; private javax.swing.JTextField latencyMaxEver; private javax.swing.JTextField latencyMaxWindow; private javax.swing.JTextField pingHost; private javax.swing.JButton pingStart; private javax.swing.JLabel pingStatus; private javax.swing.JTextField serverPort; private javax.swing.JButton serverStart; private javax.swing.JLabel serverStatus; private javax.swing.JPanel toolsTab; private javax.swing.JTextField upSpeed; // End of variables declaration//GEN-END:variables public Server server; public Client client; public Ping ping; public DNS dns; public FileTest fileTest; public int latency[]; public char mode; public int maxEver, maxWindow; //latency values private char getMode() { return ((String)clientMode.getSelectedItem()).charAt(0); } public void setServerStatus(String status) { serverStatus.setText(status); } public void setClientStatus(String status) { if (mode == 'L') { clientStatus2.setText(status); } else { clientStatus.setText(status); } } public void setReadSpeed(String spd) { downSpeed.setText(spd); } public void setWriteSpeed(String spd) { upSpeed.setText(spd); } public void setPingStatus(String status) { pingStatus.setText(status); } public void setDNSStatus(String status) { dnsStatus.setText(status); } public void setDNSIP(String status) { dnsIP.setText(status); dnsResolve.setText("Resolve"); dnsStatus.setText("Idle"); dns = null; } public void setFileStatus(String status) { fileStatus.setText(status); } public void fileTestComplete() { fileTest = null; fileStart.setText("Start"); fileFile.setEditable(true); } private void getIP() { try { //detect internet ip BufferedReader reader = new BufferedReader(new InputStreamReader (new URL("http://checkip.dyndns.org").openStream())); String line = reader.readLine(); int i1 = line.indexOf("Address: "); int i2 = line.indexOf("</body>"); internetIP.setText(line.substring(i1+9, i2)); //detect intranet ip Socket s = new Socket("checkip.dyndns.org", 80); String intra = s.getLocalAddress().getHostAddress(); s.close(); intranetIP.setText(intra); } catch (Exception e) { e.printStackTrace(); ipStatus.setText(e.toString()); } } private void startClientBandwidthTest() { if (client == null) { clientHost.setEnabled(false); clientPort.setEnabled(false); clientMode.setEnabled(false); clientStart.setText("Stop"); clientStart2.setEnabled(false); mode = getMode(); client = new Client(this, clientHost.getText(), Integer.valueOf(clientPort.getText()), mode); client.start(); } else { client.close(); client = null; clientStart.setText("Start"); clientStart2.setEnabled(true); clientStatus.setText("Idle"); clientHost.setEnabled(true); clientPort.setEnabled(true); clientMode.setEnabled(true); } } private void startClientLatencyTest() { if (client == null) { clientHost.setEnabled(false); clientPort.setEnabled(false); clientMode.setEnabled(false); clientStart2.setText("Stop"); clientStart.setEnabled(false); mode = 'L'; client = new Client(this, clientHost.getText(), Integer.valueOf(clientPort.getText()), mode); client.start(); clearLatency(); } else { client.close(); client = null; clientStart2.setText("Start"); clientStart.setEnabled(true); clientStatus2.setText("Idle"); clientHost.setEnabled(true); clientPort.setEnabled(true); clientMode.setEnabled(true); } } /** Centers a window on screen (works with java.awt.Window/Frame javax.swing.JWindow/JFrame/JDialog */ public static void centerWindow(java.awt.Window window) { Dimension d = window.getSize(); Rectangle s = GraphicsEnvironment.getLocalGraphicsEnvironment().getMaximumWindowBounds(); window.setLocation(s.width/2 - d.width/2, s.height/2 - d.height/2); } private void clearLatency() { Arrays.fill(latency, 0); maxEver = 0; maxWindow = 0; } public void addLatency(int value) { for(int a=1;a<latency.length;a++) { latency[a-1] = latency[a]; } latency[latency.length - 1] = value; latencyLabel.repaint(); } public void paintLatency(Graphics g) { int w = latency.length; int h = latencyLabel.getHeight(); int max = 1; for(int a=0;a<w;a++) { if (latency[a] > max) { max = latency[a]; } } if (max > maxEver) { maxEver = max; latencyMaxEver.setText(Integer.toString(maxEver)); // latencyMaxEver.repaint(); } if (max != maxWindow) { maxWindow = max; latencyMaxWindow.setText(Integer.toString(maxWindow)); // latencyMaxWindow.repaint(); } g.setColor(Color.black); g.fillRect(0, 0, w, h); g.setColor(Color.green); for(int x=0;x<w;x++) { int y = h - (latency[x] * 100 / max); if (y >= h) y = h-1; if (y < 0) y = 0; g.drawLine(x, y, x, h-1); } } }