Mega Code Archive

 
Categories / Java / Apache Common
 

Exercises the various protocols available in the Commons Net Package

/*  * ProtocolRunner.java  *  * Created on 22 December 2003, 12:57  */ // Import Java Packages import java.awt.Point; import java.awt.Frame; import java.awt.Toolkit; import java.awt.Dimension; import java.awt.Component; import java.io.IOException; import javax.swing.JLabel; import javax.swing.JDialog; import javax.swing.UIManager; import javax.swing.JComboBox; import javax.swing.JTextArea; import javax.swing.JTextField; import javax.swing.JOptionPane; import java.net.SocketException; import java.io.File; import java.util.Date; import java.util.Calendar; import javax.swing.JDialog; import java.io.PrintWriter; import java.net.InetAddress; import java.io.BufferedReader; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.util.GregorianCalendar; // Import NET Packages import org.apache.commons.net.*; import org.apache.commons.net.io.*; import org.apache.commons.net.ftp.*; import org.apache.commons.net.nntp.*; import org.apache.commons.net.pop3.*; import org.apache.commons.net.smtp.*; import org.apache.commons.net.tftp.*; /**  * ProtocolRunner class exercises the various protocols available in the  * Commons Net Package  * @author  Vikram Goyal  */ public class ProtocolRunner extends javax.swing.JFrame {          /** Creates new form ProtocolRunner */     public ProtocolRunner() {          // set the native look and feel         try{             UIManager.setLookAndFeel(                 UIManager.getSystemLookAndFeelClassName());         }catch(Exception e) {}                  initComponents();         // size it so that it appears full screen         Dimension screen = Toolkit.getDefaultToolkit().getScreenSize();         this.setSize(screen.width, screen.height);         this.pack();         this.setExtendedState(Frame.MAXIMIZED_BOTH);     }          /** 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.      */     private void initComponents() {//GEN-BEGIN:initComponents         ftpPanel = new javax.swing.JPanel();         jRadioButton4 = new javax.swing.JRadioButton();         jRadioButton8 = new javax.swing.JRadioButton();         jRadioButton1 = new javax.swing.JRadioButton();         jRadioButton3 = new javax.swing.JRadioButton();         jRadioButton5 = new javax.swing.JRadioButton();         jRadioButton6 = new javax.swing.JRadioButton();         jRadioButton7 = new javax.swing.JRadioButton();         nntpPanel = new javax.swing.JPanel();         jRadioButton10 = new javax.swing.JRadioButton();         jRadioButton15 = new javax.swing.JRadioButton();         jRadioButton2 = new javax.swing.JRadioButton();         jRadioButton11 = new javax.swing.JRadioButton();         jRadioButton12 = new javax.swing.JRadioButton();         jRadioButton13 = new javax.swing.JRadioButton();         jRadioButton14 = new javax.swing.JRadioButton();         smtpPanel = new javax.swing.JPanel();         jRadioButton17 = new javax.swing.JRadioButton();         jRadioButton18 = new javax.swing.JRadioButton();         jRadioButton16 = new javax.swing.JRadioButton();         pop3Panel = new javax.swing.JPanel();         jRadioButton19 = new javax.swing.JRadioButton();         jRadioButton20 = new javax.swing.JRadioButton();         jRadioButton21 = new javax.swing.JRadioButton();         jRadioButton22 = new javax.swing.JRadioButton();         jRadioButton23 = new javax.swing.JRadioButton();         jRadioButton24 = new javax.swing.JRadioButton();         jRadioButton9 = new javax.swing.JRadioButton();         ftpButtonGroup = new javax.swing.ButtonGroup();         nntpButtonGroup = new javax.swing.ButtonGroup();         smtpButtonGroup = new javax.swing.ButtonGroup();         pop3ButtonGroup = new javax.swing.ButtonGroup();         tftpPanel = new javax.swing.JPanel();         jRadioButton25 = new javax.swing.JRadioButton();         jRadioButton26 = new javax.swing.JRadioButton();         tftpPanelButtonGroup = new javax.swing.ButtonGroup();         loginDialog = new javax.swing.JDialog();         jLabel9 = new javax.swing.JLabel();         jPanel13 = new javax.swing.JPanel();         jLabel10 = new javax.swing.JLabel();         loginUsername = new javax.swing.JTextField();         jLabel11 = new javax.swing.JLabel();         loginPassword = new javax.swing.JPasswordField();         jPanel14 = new javax.swing.JPanel();         jButton1 = new javax.swing.JButton();         jButton2 = new javax.swing.JButton();         singleValueDialog = new javax.swing.JDialog();         jLabel12 = new javax.swing.JLabel();         jPanel15 = new javax.swing.JPanel();         singleValueLabel = new javax.swing.JLabel();         singleValueField = new javax.swing.JTextField();         jPanel16 = new javax.swing.JPanel();         jButton3 = new javax.swing.JButton();         jButton4 = new javax.swing.JButton();         multipleValueDialog = new javax.swing.JDialog();         jLabel13 = new javax.swing.JLabel();         jPanel17 = new javax.swing.JPanel();         jButton5 = new javax.swing.JButton();         jButton6 = new javax.swing.JButton();         jPanel18 = new javax.swing.JPanel();         jLabel16 = new javax.swing.JLabel();         jScrollPane3 = new javax.swing.JScrollPane();         messageArea = new javax.swing.JTextArea();         jPanel19 = new javax.swing.JPanel();         jLabel14 = new javax.swing.JLabel();         fromField = new javax.swing.JTextField();         jLabel15 = new javax.swing.JLabel();         subjectField = new javax.swing.JTextField();         variableLabel = new javax.swing.JLabel();         variableField = new javax.swing.JTextField();         jTabbedPane1 = new javax.swing.JTabbedPane();         jPanel1 = new javax.swing.JPanel();         jPanel4 = new javax.swing.JPanel();         jScrollPane1 = new javax.swing.JScrollPane();         tcpServerResponse = new javax.swing.JTextArea();         jPanel7 = new javax.swing.JPanel();         presetPanel = new javax.swing.JPanel();         defaultPanel = new javax.swing.JPanel();         jLabel5 = new javax.swing.JLabel();         jPanel9 = new javax.swing.JPanel();         jLabel4 = new javax.swing.JLabel();         commandBox = new javax.swing.JTextField();         jPanel5 = new javax.swing.JPanel();         jPanel6 = new javax.swing.JPanel();         jLabel3 = new javax.swing.JLabel();         tcpSelectionBox = new javax.swing.JComboBox();         jPanel3 = new javax.swing.JPanel();         jLabel1 = new javax.swing.JLabel();         serverNameField = new javax.swing.JTextField();         jLabel2 = new javax.swing.JLabel();         portNumberField = new javax.swing.JTextField();         tcpConnectButton = new javax.swing.JButton();         jPanel2 = new javax.swing.JPanel();         jPanel10 = new javax.swing.JPanel();         jPanel8 = new javax.swing.JPanel();         jLabel6 = new javax.swing.JLabel();         udpSelectionBox = new javax.swing.JComboBox();         jPanel12 = new javax.swing.JPanel();         jLabel7 = new javax.swing.JLabel();         udpRemoteServerField = new javax.swing.JTextField();         jPanel11 = new javax.swing.JPanel();         udpCommandPanel = new javax.swing.JPanel();         udpStartButton = new javax.swing.JButton();         jScrollPane2 = new javax.swing.JScrollPane();         udpServerResponse = new javax.swing.JTextArea();         ftpPanel.setLayout(new java.awt.GridLayout(3, 3));         jRadioButton4.setText("Login");         ftpButtonGroup.add(jRadioButton4);         jRadioButton4.addActionListener(new java.awt.event.ActionListener() {             public void actionPerformed(java.awt.event.ActionEvent evt) {                 jRadioButton4ActionPerformed(evt);             }         });         ftpPanel.add(jRadioButton4);         jRadioButton8.setText("Logout");         ftpButtonGroup.add(jRadioButton8);         jRadioButton8.addActionListener(new java.awt.event.ActionListener() {             public void actionPerformed(java.awt.event.ActionEvent evt) {                 jRadioButton8ActionPerformed(evt);             }         });         ftpPanel.add(jRadioButton8);         jRadioButton1.setText("Change Working Directory");         ftpButtonGroup.add(jRadioButton1);         jRadioButton1.addActionListener(new java.awt.event.ActionListener() {             public void actionPerformed(java.awt.event.ActionEvent evt) {                 jRadioButton1ActionPerformed(evt);             }         });         ftpPanel.add(jRadioButton1);         jRadioButton3.setText("List Files");         ftpButtonGroup.add(jRadioButton3);         jRadioButton3.addActionListener(new java.awt.event.ActionListener() {             public void actionPerformed(java.awt.event.ActionEvent evt) {                 jRadioButton3ActionPerformed(evt);             }         });         ftpPanel.add(jRadioButton3);         jRadioButton5.setText("Make Directory");         ftpButtonGroup.add(jRadioButton5);         jRadioButton5.addActionListener(new java.awt.event.ActionListener() {             public void actionPerformed(java.awt.event.ActionEvent evt) {                 jRadioButton5ActionPerformed(evt);             }         });         ftpPanel.add(jRadioButton5);         jRadioButton6.setText("Upload File");         ftpButtonGroup.add(jRadioButton6);         jRadioButton6.addActionListener(new java.awt.event.ActionListener() {             public void actionPerformed(java.awt.event.ActionEvent evt) {                 jRadioButton6ActionPerformed(evt);             }         });         ftpPanel.add(jRadioButton6);         jRadioButton7.setText("Download File");         ftpButtonGroup.add(jRadioButton7);         jRadioButton7.addActionListener(new java.awt.event.ActionListener() {             public void actionPerformed(java.awt.event.ActionEvent evt) {                 jRadioButton7ActionPerformed(evt);             }         });         ftpPanel.add(jRadioButton7);         nntpPanel.setLayout(new java.awt.GridLayout(3, 3));         jRadioButton10.setText("Login");         nntpButtonGroup.add(jRadioButton10);         jRadioButton10.addActionListener(new java.awt.event.ActionListener() {             public void actionPerformed(java.awt.event.ActionEvent evt) {                 jRadioButton10ActionPerformed(evt);             }         });         nntpPanel.add(jRadioButton10);         jRadioButton15.setText("Logout");         nntpButtonGroup.add(jRadioButton15);         jRadioButton15.addActionListener(new java.awt.event.ActionListener() {             public void actionPerformed(java.awt.event.ActionEvent evt) {                 jRadioButton15ActionPerformed(evt);             }         });         nntpPanel.add(jRadioButton15);         jRadioButton2.setText("List All NewsGroups");         nntpButtonGroup.add(jRadioButton2);         jRadioButton2.addActionListener(new java.awt.event.ActionListener() {             public void actionPerformed(java.awt.event.ActionEvent evt) {                 jRadioButton2ActionPerformed(evt);             }         });         nntpPanel.add(jRadioButton2);         jRadioButton11.setText("List New NewsGroups");         nntpButtonGroup.add(jRadioButton11);         jRadioButton11.addActionListener(new java.awt.event.ActionListener() {             public void actionPerformed(java.awt.event.ActionEvent evt) {                 jRadioButton11ActionPerformed(evt);             }         });         nntpPanel.add(jRadioButton11);         jRadioButton12.setText("List New News");         nntpButtonGroup.add(jRadioButton12);         jRadioButton12.addActionListener(new java.awt.event.ActionListener() {             public void actionPerformed(java.awt.event.ActionEvent evt) {                 jRadioButton12ActionPerformed(evt);             }         });         nntpPanel.add(jRadioButton12);         jRadioButton13.setText("Post Article");         nntpButtonGroup.add(jRadioButton13);         jRadioButton13.addActionListener(new java.awt.event.ActionListener() {             public void actionPerformed(java.awt.event.ActionEvent evt) {                 jRadioButton13ActionPerformed(evt);             }         });         nntpPanel.add(jRadioButton13);         jRadioButton14.setText("Get Article");         nntpButtonGroup.add(jRadioButton14);         jRadioButton14.addActionListener(new java.awt.event.ActionListener() {             public void actionPerformed(java.awt.event.ActionEvent evt) {                 jRadioButton14ActionPerformed(evt);             }         });         nntpPanel.add(jRadioButton14);         smtpPanel.setLayout(new java.awt.GridLayout(1, 1));         jRadioButton17.setText("Login");         smtpButtonGroup.add(jRadioButton17);         jRadioButton17.addActionListener(new java.awt.event.ActionListener() {             public void actionPerformed(java.awt.event.ActionEvent evt) {                 jRadioButton17ActionPerformed(evt);             }         });         smtpPanel.add(jRadioButton17);         jRadioButton18.setText("Logout");         smtpButtonGroup.add(jRadioButton18);         jRadioButton18.addActionListener(new java.awt.event.ActionListener() {             public void actionPerformed(java.awt.event.ActionEvent evt) {                 jRadioButton18ActionPerformed(evt);             }         });         smtpPanel.add(jRadioButton18);         jRadioButton16.setText("Send Simple Message");         smtpButtonGroup.add(jRadioButton16);         jRadioButton16.addActionListener(new java.awt.event.ActionListener() {             public void actionPerformed(java.awt.event.ActionEvent evt) {                 jRadioButton16ActionPerformed(evt);             }         });         smtpPanel.add(jRadioButton16);         pop3Panel.setLayout(new java.awt.GridLayout(2, 0));         jRadioButton19.setText("Login");         pop3ButtonGroup.add(jRadioButton19);         jRadioButton19.addActionListener(new java.awt.event.ActionListener() {             public void actionPerformed(java.awt.event.ActionEvent evt) {                 jRadioButton19ActionPerformed(evt);             }         });         pop3Panel.add(jRadioButton19);         jRadioButton20.setText("Logout");         pop3ButtonGroup.add(jRadioButton20);         jRadioButton20.addActionListener(new java.awt.event.ActionListener() {             public void actionPerformed(java.awt.event.ActionEvent evt) {                 jRadioButton20ActionPerformed(evt);             }         });         pop3Panel.add(jRadioButton20);         jRadioButton21.setText("List All Messages");         pop3ButtonGroup.add(jRadioButton21);         jRadioButton21.addActionListener(new java.awt.event.ActionListener() {             public void actionPerformed(java.awt.event.ActionEvent evt) {                 jRadioButton21ActionPerformed(evt);             }         });         pop3Panel.add(jRadioButton21);         jRadioButton22.setText("Status");         pop3ButtonGroup.add(jRadioButton22);         jRadioButton22.addActionListener(new java.awt.event.ActionListener() {             public void actionPerformed(java.awt.event.ActionEvent evt) {                 jRadioButton22ActionPerformed(evt);             }         });         pop3Panel.add(jRadioButton22);         jRadioButton23.setText("Retrieve Message");         pop3ButtonGroup.add(jRadioButton23);         jRadioButton23.addActionListener(new java.awt.event.ActionListener() {             public void actionPerformed(java.awt.event.ActionEvent evt) {                 jRadioButton23ActionPerformed(evt);             }         });         pop3Panel.add(jRadioButton23);         jRadioButton24.setText("Delete Message");         pop3ButtonGroup.add(jRadioButton24);         jRadioButton24.addActionListener(new java.awt.event.ActionListener() {             public void actionPerformed(java.awt.event.ActionEvent evt) {                 jRadioButton24ActionPerformed(evt);             }         });         pop3Panel.add(jRadioButton24);         jRadioButton9.setText("Reset");         pop3ButtonGroup.add(jRadioButton9);         jRadioButton9.addActionListener(new java.awt.event.ActionListener() {             public void actionPerformed(java.awt.event.ActionEvent evt) {                 jRadioButton9ActionPerformed(evt);             }         });         pop3Panel.add(jRadioButton9);         tftpPanel.setLayout(new java.awt.GridLayout(1, 0));         jRadioButton25.setText("Send A File");         tftpPanelButtonGroup.add(jRadioButton25);         jRadioButton25.addActionListener(new java.awt.event.ActionListener() {             public void actionPerformed(java.awt.event.ActionEvent evt) {                 jRadioButton25ActionPerformed(evt);             }         });         tftpPanel.add(jRadioButton25);         jRadioButton26.setText("Receive A File");         tftpPanelButtonGroup.add(jRadioButton26);         jRadioButton26.addActionListener(new java.awt.event.ActionListener() {             public void actionPerformed(java.awt.event.ActionEvent evt) {                 jRadioButton26ActionPerformed(evt);             }         });         tftpPanel.add(jRadioButton26);         loginDialog.getContentPane().setLayout(new java.awt.BorderLayout(0, 5));         loginDialog.setTitle("Input Required");         loginDialog.setModal(true);         loginDialog.setResizable(false);         jLabel9.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);         jLabel9.setText("Please Enter Login Details");         loginDialog.getContentPane().add(jLabel9, java.awt.BorderLayout.NORTH);         jPanel13.setLayout(new java.awt.GridLayout(2, 2, 5, 3));         jLabel10.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);         jLabel10.setText("Username:");         jPanel13.add(jLabel10);         loginUsername.setColumns(15);         jPanel13.add(loginUsername);         jLabel11.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);         jLabel11.setText("Password:");         jPanel13.add(jLabel11);         loginPassword.setColumns(15);         jPanel13.add(loginPassword);         loginDialog.getContentPane().add(jPanel13, java.awt.BorderLayout.CENTER);         jPanel14.setLayout(new java.awt.GridLayout(1, 0));         jButton1.setText("OK");         jButton1.addActionListener(new java.awt.event.ActionListener() {             public void actionPerformed(java.awt.event.ActionEvent evt) {                 jButton1ActionPerformed(evt);             }         });         jPanel14.add(jButton1);         jButton2.setText("Cancel");         jButton2.addActionListener(new java.awt.event.ActionListener() {             public void actionPerformed(java.awt.event.ActionEvent evt) {                 jButton2ActionPerformed(evt);             }         });         jPanel14.add(jButton2);         loginDialog.getContentPane().add(jPanel14, java.awt.BorderLayout.SOUTH);         singleValueDialog.setTitle("Input Required");         singleValueDialog.setModal(true);         singleValueDialog.setResizable(false);         jLabel12.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);         jLabel12.setText("Please enter a value");         singleValueDialog.getContentPane().add(jLabel12, java.awt.BorderLayout.NORTH);         jPanel15.setLayout(new java.awt.GridLayout(1, 0, 3, 0));         singleValueLabel.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);         jPanel15.add(singleValueLabel);         singleValueField.setColumns(15);         jPanel15.add(singleValueField);         singleValueDialog.getContentPane().add(jPanel15, java.awt.BorderLayout.CENTER);         jPanel16.setLayout(new java.awt.GridLayout(1, 0, 5, 0));         jButton3.setText("OK");         jButton3.addActionListener(new java.awt.event.ActionListener() {             public void actionPerformed(java.awt.event.ActionEvent evt) {                 jButton3ActionPerformed(evt);             }         });         jPanel16.add(jButton3);         jButton4.setText("Cancel");         jButton4.addActionListener(new java.awt.event.ActionListener() {             public void actionPerformed(java.awt.event.ActionEvent evt) {                 jButton4ActionPerformed(evt);             }         });         jPanel16.add(jButton4);         singleValueDialog.getContentPane().add(jPanel16, java.awt.BorderLayout.SOUTH);         multipleValueDialog.setTitle("Input Required");         multipleValueDialog.setModal(true);         jLabel13.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);         jLabel13.setText("Please enter the following values");         multipleValueDialog.getContentPane().add(jLabel13, java.awt.BorderLayout.NORTH);         jPanel17.setLayout(new java.awt.GridLayout(1, 0, 5, 0));         jButton5.setText("OK");         jButton5.addActionListener(new java.awt.event.ActionListener() {             public void actionPerformed(java.awt.event.ActionEvent evt) {                 jButton5ActionPerformed(evt);             }         });         jPanel17.add(jButton5);         jButton6.setText("Cancel");         jButton6.addActionListener(new java.awt.event.ActionListener() {             public void actionPerformed(java.awt.event.ActionEvent evt) {                 jButton6ActionPerformed(evt);             }         });         jPanel17.add(jButton6);         multipleValueDialog.getContentPane().add(jPanel17, java.awt.BorderLayout.SOUTH);         jPanel18.setLayout(new java.awt.BorderLayout());         jLabel16.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);         jLabel16.setText("Enter Message:");         jPanel18.add(jLabel16, java.awt.BorderLayout.WEST);         messageArea.setColumns(20);         messageArea.setRows(15);         jScrollPane3.setViewportView(messageArea);         jPanel18.add(jScrollPane3, java.awt.BorderLayout.CENTER);         jPanel19.setLayout(new java.awt.GridLayout(3, 2, 3, 3));         jLabel14.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);         jLabel14.setText("From:");         jPanel19.add(jLabel14);         fromField.setColumns(15);         jPanel19.add(fromField);         jLabel15.setHorizontalAlignment(javax.swing.SwingConstants.LEFT);         jLabel15.setText("Subject:");         jPanel19.add(jLabel15);         subjectField.setColumns(15);         jPanel19.add(subjectField);         variableLabel.setText("Newsgroup:");         jPanel19.add(variableLabel);         variableField.setColumns(15);         jPanel19.add(variableField);         jPanel18.add(jPanel19, java.awt.BorderLayout.NORTH);         multipleValueDialog.getContentPane().add(jPanel18, java.awt.BorderLayout.CENTER);         setTitle("Protocol Runner");         addWindowListener(new java.awt.event.WindowAdapter() {             public void windowClosing(java.awt.event.WindowEvent evt) {                 exitForm(evt);             }         });         jPanel1.setLayout(new java.awt.BorderLayout());         jPanel4.setLayout(new java.awt.BorderLayout());         jScrollPane1.setBorder(new javax.swing.border.TitledBorder("Server Output"));         tcpServerResponse.setEditable(false);         tcpServerResponse.setFont(new java.awt.Font("Monospaced", 0, 12));         jScrollPane1.setViewportView(tcpServerResponse);         jPanel4.add(jScrollPane1, java.awt.BorderLayout.CENTER);         jPanel7.setLayout(new java.awt.GridLayout(1, 2, 5, 0));         presetPanel.setLayout(new java.awt.BorderLayout());         presetPanel.setBorder(new javax.swing.border.TitledBorder("Preset Commands"));         jLabel5.setFont(new java.awt.Font("Dialog", 3, 12));         jLabel5.setText("No Preset Commands. Simply Connect");         defaultPanel.add(jLabel5);         presetPanel.add(defaultPanel, java.awt.BorderLayout.CENTER);         jPanel7.add(presetPanel);         jPanel9.setBorder(new javax.swing.border.TitledBorder("Freeflow Commands"));         jLabel4.setText("Type Command Here:");         jPanel9.add(jLabel4);         commandBox.setColumns(15);         commandBox.setEnabled(false);         commandBox.addActionListener(new java.awt.event.ActionListener() {             public void actionPerformed(java.awt.event.ActionEvent evt) {                 commandBoxActionPerformed(evt);             }         });         jPanel9.add(commandBox);         jPanel7.add(jPanel9);         jPanel4.add(jPanel7, java.awt.BorderLayout.NORTH);         jPanel1.add(jPanel4, java.awt.BorderLayout.CENTER);         jPanel5.setLayout(new java.awt.GridLayout(2, 1, 0, 5));         jPanel6.setBorder(new javax.swing.border.TitledBorder("Protocol"));         jLabel3.setText("Select Protocol:");         jPanel6.add(jLabel3);         tcpSelectionBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "CharGen", "Daytime", "Echo", "Finger", "FTP", "NNTP", "POP3", "SMTP", "Time", "Whois" }));         tcpSelectionBox.addActionListener(new java.awt.event.ActionListener() {             public void actionPerformed(java.awt.event.ActionEvent evt) {                 tcpSelectionBoxActionPerformed(evt);             }         });         jPanel6.add(tcpSelectionBox);         jPanel5.add(jPanel6);         jPanel3.setBorder(new javax.swing.border.TitledBorder("Server Connection Details"));         jLabel1.setText("Server:");         jPanel3.add(jLabel1);         serverNameField.setColumns(25);         jPanel3.add(serverNameField);         jLabel2.setText("Port:");         jPanel3.add(jLabel2);         portNumberField.setColumns(4);         portNumberField.setText("19");         jPanel3.add(portNumberField);         tcpConnectButton.setText("CONNECT");         tcpConnectButton.addActionListener(new java.awt.event.ActionListener() {             public void actionPerformed(java.awt.event.ActionEvent evt) {                 tcpConnectButtonActionPerformed(evt);             }         });         jPanel3.add(tcpConnectButton);         jPanel5.add(jPanel3);         jPanel1.add(jPanel5, java.awt.BorderLayout.NORTH);         jTabbedPane1.addTab("TCP", jPanel1);         jPanel2.setLayout(new java.awt.BorderLayout());         jPanel10.setLayout(new java.awt.GridLayout(2, 0));         jPanel8.setBorder(new javax.swing.border.TitledBorder("Protocol"));         jLabel6.setText("Select Protocol:");         jPanel8.add(jLabel6);         udpSelectionBox.setModel(new javax.swing.DefaultComboBoxModel(new String[] { "CharGen", "Daytime", "Echo", "TFTP", "Time" }));         udpSelectionBox.addActionListener(new java.awt.event.ActionListener() {             public void actionPerformed(java.awt.event.ActionEvent evt) {                 udpSelectionBoxActionPerformed(evt);             }         });         jPanel8.add(udpSelectionBox);         jPanel10.add(jPanel8);         jPanel12.setBorder(new javax.swing.border.TitledBorder("Remote Server Details"));         jLabel7.setText("Remote Server:");         jPanel12.add(jLabel7);         udpRemoteServerField.setColumns(25);         jPanel12.add(udpRemoteServerField);         jPanel10.add(jPanel12);         jPanel2.add(jPanel10, java.awt.BorderLayout.NORTH);         jPanel11.setLayout(new java.awt.BorderLayout());         udpCommandPanel.setLayout(new java.awt.GridLayout(1, 0));         udpCommandPanel.setBorder(new javax.swing.border.TitledBorder("Command Panel"));         udpStartButton.setText("START");         udpStartButton.addActionListener(new java.awt.event.ActionListener() {             public void actionPerformed(java.awt.event.ActionEvent evt) {                 udpStartButtonActionPerformed(evt);             }         });         udpCommandPanel.add(udpStartButton);         jPanel11.add(udpCommandPanel, java.awt.BorderLayout.NORTH);         udpServerResponse.setEditable(false);         udpServerResponse.setFont(new java.awt.Font("Monospaced", 0, 12));         jScrollPane2.setViewportView(udpServerResponse);         jPanel11.add(jScrollPane2, java.awt.BorderLayout.CENTER);         jPanel2.add(jPanel11, java.awt.BorderLayout.CENTER);         jTabbedPane1.addTab("UDP", jPanel2);         getContentPane().add(jTabbedPane1, java.awt.BorderLayout.CENTER);         pack();     }//GEN-END:initComponents     private void jRadioButton26ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButton26ActionPerformed         // tftp receive a file:         udpRemoteServer = udpRemoteServerField.getText();         if(udpRemoteServer == null || udpRemoteServer.length() == 0) {             showError("Please enter a remote server");             return;         }                  // get the name of the file to receive         udpStartButton.doClick();                  singleValueLabel.setText("Enter file path (TFTP-Receive):");         showDialog(singleValueDialog);     }//GEN-LAST:event_jRadioButton26ActionPerformed     private void jRadioButton25ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButton25ActionPerformed         // tftp send a file:         udpRemoteServer = udpRemoteServerField.getText();         if(udpRemoteServer == null || udpRemoteServer.length() == 0) {             showError("Please enter a remote server");             return;         }                  // get the name of the file to send         udpStartButton.doClick();                  singleValueLabel.setText("Enter file path (TFTP-Send):");         showDialog(singleValueDialog);     }//GEN-LAST:event_jRadioButton25ActionPerformed     private void udpStartButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_udpStartButtonActionPerformed         // handler for Start button for UDP:         if(started) { // means a session has already started             try{                 handleUDPStop();             }catch(IOException ex) {                 showError(ex.getMessage());             }             return;         }                  udpRemoteServer = udpRemoteServerField.getText();                  if(udpRemoteServer == null || udpRemoteServer.length() == 0) {             showError("Please enter a remote server");             return;         }         try{             udpClient =                ClientFactory.getUDPClientInstance(                   udpSelectionBox.getSelectedIndex());             udpClient.open();         }catch(SocketException se){             showError(se.getMessage());             return;         }catch(IOException ioex){             showError(ioex.getMessage());             return;         }                  // if we come here means we have opened a port         started = true;         udpStartButton.setText("Stop");         udpSelectionBox.setEnabled(false);         jTabbedPane1.setEnabledAt(0, false);                  try {             ProtocolHandler.handleUDPProtocol(                 udpSelectionBox.getSelectedIndex(),                  udpClient,                  this);         }catch (IOException io) {             showError(io.getMessage());             io.printStackTrace();         }                               }//GEN-LAST:event_udpStartButtonActionPerformed     private void jRadioButton9ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButton9ActionPerformed         // reset for pop3:         if(!checkValidConnection()) return;         try {             ((POP3Client)tcpClient).reset();             tcpServerResponse.append(                 ((POP3Client)tcpClient).getReplyString() +                  "\r\n");         }catch(IOException ioex) { showError(ioex.getMessage()); return; }             }//GEN-LAST:event_jRadioButton9ActionPerformed     private void jRadioButton24ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButton24ActionPerformed         // delete message for pop3:         if(!checkValidConnection()) return;                  singleValueLabel.setText("Enter message number to delete:");         showDialog(singleValueDialog);     }//GEN-LAST:event_jRadioButton24ActionPerformed     private void jRadioButton23ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButton23ActionPerformed         // Retrieve message for pop3:         if(!checkValidConnection()) return;                  singleValueLabel.setText("Enter message number:");         showDialog(singleValueDialog);     }//GEN-LAST:event_jRadioButton23ActionPerformed     private void jRadioButton21ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButton21ActionPerformed         // list all messages for pop3:         if(!checkValidConnection()) return;         try {             ((POP3Client)tcpClient).listMessages();             tcpServerResponse.append(                 ((POP3Client)tcpClient).getReplyString() +                  "\r\n");         }catch(IOException ioex) { showError(ioex.getMessage()); return; }             }//GEN-LAST:event_jRadioButton21ActionPerformed     private void jRadioButton22ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButton22ActionPerformed         // status for pop3:         if(!checkValidConnection()) return;         try {             ((POP3Client)tcpClient).status();             tcpServerResponse.append(                 ((POP3Client)tcpClient).getReplyString() +                 "\r\n");         }catch(IOException ioex) { showError(ioex.getMessage()); return; }             }//GEN-LAST:event_jRadioButton22ActionPerformed     private void jRadioButton20ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButton20ActionPerformed         // logout for pop3:         if(!checkValidConnection()) return;         try {             ((POP3Client)tcpClient).logout();             tcpServerResponse.append(                 ((POP3Client)tcpClient).getReplyString() +                 "\r\n");             handleDisconnect();         }catch(IOException ioex) { showError(ioex.getMessage()); return; }     }//GEN-LAST:event_jRadioButton20ActionPerformed     private void jRadioButton19ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButton19ActionPerformed         // login for pop3:         if(!checkValidConnection()) return;          showDialog(loginDialog);     }//GEN-LAST:event_jRadioButton19ActionPerformed     private void jRadioButton16ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButton16ActionPerformed         // Send simple message for SMTP:         if(!checkValidConnection()) return;                  variableLabel.setText("To:");         showDialog(multipleValueDialog);     }//GEN-LAST:event_jRadioButton16ActionPerformed     private void jRadioButton18ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButton18ActionPerformed         // logout for SMTP:         if(!checkValidConnection()) return;                  try {             ((SMTPClient)tcpClient).logout();             tcpServerResponse.append(                 ((SMTPClient)tcpClient).getReplyString() +                 "\r\n");         }catch(IOException ioex) { showError(ioex.getMessage()); return; }              }//GEN-LAST:event_jRadioButton18ActionPerformed     private void jRadioButton17ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButton17ActionPerformed         // login for SMTP:         if(!checkValidConnection()) return;                  // for SMTP login is simply sending HELO         try {             ((SMTPClient)tcpClient).login();             tcpServerResponse.append(                 ((SMTPClient)tcpClient).getReplyString() +                 "\r\n");         }catch(IOException ioex) { showError(ioex.getMessage()); return; }               }//GEN-LAST:event_jRadioButton17ActionPerformed     private void jButton5ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton5ActionPerformed         // ok for multiple value dialog:         String fromText     = fromField.getText();         String subjectText  = subjectField.getText();         String variableText = variableField.getText();         String messageText  = messageArea.getText();                  DotTerminatedMessageWriter writer;                        int selection = tcpSelectionBox.getSelectedIndex();         try{             if(selection == 5) { // means handling NNTP posting of message                 writer = (DotTerminatedMessageWriter)                     ((NNTPClient)tcpClient).postArticle();                                               if(writer == null) {                      tcpServerResponse.append(                         ((NNTPClient)tcpClient).getReplyString() + "\r\n");                     return;                 }                                  // create simple NNTP headers                 SimpleNNTPHeader headers =                      new SimpleNNTPHeader(fromText, subjectText);                 headers.addNewsgroup(variableText);                                  // and write the message on                 writer.write(headers.toString());                 writer.write(messageText);                 writer.close();                 ((NNTPClient)tcpClient).completePendingCommand();                                 tcpServerResponse.append(                     ((NNTPClient)tcpClient).getReplyString() + "\r\n");                             } else if(selection == 7) { // means handling SMTP posting of message                                  ((SMTPClient)tcpClient).setSender(fromText);                 ((SMTPClient)tcpClient).addRecipient(variableText);                 writer = (DotTerminatedMessageWriter)                      ((SMTPClient)tcpClient).sendMessageData();                                                  if(writer == null) {                     tcpServerResponse.append(                         ((SMTPClient)tcpClient).getReplyString() + "\r\n");                     return;                 }                                  // create Simple SMTP header                 SimpleSMTPHeader headers =                      new SimpleSMTPHeader(fromText, variableText, subjectText);                                  writer.write(headers.toString());                 writer.write(messageText);                 writer.close();                 ((SMTPClient)tcpClient).completePendingCommand();                 tcpServerResponse.append(                     ((SMTPClient)tcpClient).getReplyString() + "\r\n");                             }         }catch(IOException ioex) { showError(ioex.getMessage()); }         finally{              fromField.setText("");              subjectField.setText("");              variableField.setText("");              messageArea.setText("");             multipleValueDialog.setVisible(false);         }     }//GEN-LAST:event_jButton5ActionPerformed     private void jButton6ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton6ActionPerformed         // cancel for multiple value dialog:         multipleValueDialog.setVisible(false);     }//GEN-LAST:event_jButton6ActionPerformed     private void jRadioButton13ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButton13ActionPerformed         // post article for nntp:         if(!checkValidConnection()) return;                  variableLabel.setText("Newsgroup:");         showDialog(multipleValueDialog);     }//GEN-LAST:event_jRadioButton13ActionPerformed     private void jRadioButton14ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButton14ActionPerformed         // get article for nntp:         if(!checkValidConnection()) return;                  singleValueLabel.setText("Enter message id:");         showDialog(singleValueDialog);     }//GEN-LAST:event_jRadioButton14ActionPerformed     private void jRadioButton12ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButton12ActionPerformed         // list new news messages for nntp:         if(!checkValidConnection()) return;                  singleValueLabel.setText("Full or part name of group:");         showDialog(singleValueDialog);     }//GEN-LAST:event_jRadioButton12ActionPerformed     private void jRadioButton15ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButton15ActionPerformed         // logout for nntp:         if(!checkValidConnection()) return;                  try {             ((NNTPClient)tcpClient).logout();             tcpServerResponse.append(                 ((NNTPClient)tcpClient).getReplyString() + "\r\n");             handleDisconnect();                     }catch(IOException ioex) { showError(ioex.getMessage()); }     }//GEN-LAST:event_jRadioButton15ActionPerformed     private void jRadioButton2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButton2ActionPerformed         // list all news groups for nntp:         if(!checkValidConnection()) return;                  try{             NewsgroupInfo[] newsgroups =                  ((NNTPClient)tcpClient).listNewsgroups();             tcpServerResponse.append(                 ((NNTPClient)tcpClient).getReplyString() + "\r\n");             for(int i=0; i<newsgroups.length; i++) {                 tcpServerResponse.append(newsgroups[i].getNewsgroup() + "\r\n");             }         }catch(IOException ioex) { showError(ioex.getMessage()); }             }//GEN-LAST:event_jRadioButton2ActionPerformed     private void jRadioButton11ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButton11ActionPerformed         // list new news group for nntp:         if(!checkValidConnection()) return;                  // create a query to find new news groups since yesterday         GregorianCalendar today = new GregorianCalendar();             today.roll(Calendar.DAY_OF_YEAR, false);         NewGroupsOrNewsQuery query =            new NewGroupsOrNewsQuery(today, false);                  try{             NewsgroupInfo[] newsgroups =                  ((NNTPClient)tcpClient).listNewNewsgroups(query);             tcpServerResponse.append(                 ((NNTPClient)tcpClient).getReplyString() + "\r\n");                          if(newsgroups == null) return;             for(int i=0; i<newsgroups.length; i++) {                 tcpServerResponse.append(newsgroups[i].getNewsgroup() + "\r\n");                             }             if(newsgroups.length == 0)                 tcpServerResponse.append("No new NewsGroups\r\n");                     }catch(IOException ioex) { showError(ioex.getMessage()); }                    }//GEN-LAST:event_jRadioButton11ActionPerformed     private void jRadioButton10ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButton10ActionPerformed         // login for nntp:         if(!checkValidConnection()) return;          showDialog(loginDialog);     }//GEN-LAST:event_jRadioButton10ActionPerformed     private void jRadioButton7ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButton7ActionPerformed         // Download file for FTP:         if(!checkValidConnection()) return;                  singleValueLabel.setText("Remote file:");         showDialog(singleValueDialog);     }//GEN-LAST:event_jRadioButton7ActionPerformed     private void jRadioButton6ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButton6ActionPerformed         // upload file for FTP:         if(!checkValidConnection()) return;                  singleValueLabel.setText("Full path to local file:");         showDialog(singleValueDialog);     }//GEN-LAST:event_jRadioButton6ActionPerformed     private void jRadioButton5ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButton5ActionPerformed         // make directory for FTP:         if(!checkValidConnection()) return;                  singleValueLabel.setText("New Directory Name:");         showDialog(singleValueDialog);     }//GEN-LAST:event_jRadioButton5ActionPerformed     private void jRadioButton3ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButton3ActionPerformed         // list files for FTP:         if(!checkValidConnection()) return;                  try {             FTPFile[] fileList = ((FTPClient)tcpClient).listFiles();             tcpServerResponse.append(                 ((FTPClient)tcpClient).getReplyString() + "\r\n");             if(fileList == null) return;             for(int i=0; i<fileList.length; i++) {               tcpServerResponse.append(fileList[i].toString() + "\r\n");             }         }catch(IOException ioex) { showError(ioex.getMessage()); return; }     }//GEN-LAST:event_jRadioButton3ActionPerformed     private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton3ActionPerformed         // Single Value Dialog OK Button                  // this method only handles tcp protocols, for udp protocols, another         // method is used         if(jTabbedPane1.getSelectedIndex() == 1) { // means we are in udp tab             udpSingleValOKButton();              return;         }                  String valueText = singleValueField.getText();         String valueLabel = singleValueLabel.getText();         int selection = tcpSelectionBox.getSelectedIndex();         try{             if(selection == 4) { // means handling FTP                 if("New Directory:".equals(valueLabel)) {                      // means CWD                     ((FTPClient)tcpClient).changeWorkingDirectory(valueText);                 } else if(                     "New Directory Name:".equals(valueLabel)) {                         // means make new directory                         ((FTPClient)tcpClient).makeDirectory(valueText);                 } else if(                     "Full path to local file:".equals(                         valueLabel)) {                              // means uploading file                             FileInputStream input =                                  new FileInputStream(valueText);                             ((FTPClient)tcpClient).storeFile(                                 new File(valueText).getName(), input);                             input.close();                 } else if("Remote file:".equals(valueLabel)) {                      // means downloading a file                     FileOutputStream output =                          new FileOutputStream(                             System.getProperty("user.dir") +                              System.getProperty("file.separator") +                              valueText);                     ((FTPClient)tcpClient).retrieveFile(valueText, output);                     output.close();                 }                 tcpServerResponse.append(                     ((FTPClient)tcpClient).getReplyString() + "\r\n");             } else if(selection == 5) { // means handling NNTP                 if("Full or part name of group:".equals(valueLabel)) {                     // means getting new news of a group                                          // create a query to get all new messages in this group                     // since yesterday                     GregorianCalendar today = new GregorianCalendar();                         today.roll(Calendar.DAY_OF_YEAR, false);                     NewGroupsOrNewsQuery query =                        new NewGroupsOrNewsQuery(today, false);                     query.addDistribution(valueText);                                          String[] result =                          ((NNTPClient)tcpClient).listNewNews(query);                                          tcpServerResponse.append(                         ((NNTPClient)tcpClient).getReplyString() + "\r\n");                                          // in case the NEWNEWS cmmand is disabled                     if(result == null)  return;                     for(int i=0; i<result.length; i++) {                         tcpServerResponse.append(                             result[i] + "\r\n");                     }                 } else if("Enter message id:".equals(valueLabel)) {                     // means getting a message based on id                     DotTerminatedMessageReader reader =                          (DotTerminatedMessageReader)                         ((NNTPClient)tcpClient).retrieveArticle(                         "<" + valueText + ">");                     tcpServerResponse.append(                         ((NNTPClient)tcpClient).getReplyString() + "\r\n");                                                              if(reader == null) return;                                          BufferedReader buffReader = new BufferedReader(reader);                     String lineRead;                     while((lineRead = buffReader.readLine()) != null) {                         tcpServerResponse.append(lineRead + "\r\n");                     }                 }             } else if(selection == 6) { // means handling pop3                 if("Enter message number:".equals(valueLabel)) {                      // means getting a message based on number                     DotTerminatedMessageReader reader =                          (DotTerminatedMessageReader)                                             ((POP3Client)tcpClient).retrieveMessage(                             Integer.parseInt(valueText));                                          tcpServerResponse.append(                         ((POP3Client)tcpClient).getReplyString() +                          "\r\n");                                          if(reader == null) return;                                          BufferedReader buffReader = new BufferedReader(reader);                     String lineRead;                     while((lineRead = buffReader.readLine()) != null) {                         tcpServerResponse.append(lineRead + "\r\n");                     }                                     } else if("Enter message number to delete:".equals(valueLabel)){                     // means deleting a message based on id                     ((POP3Client)tcpClient).deleteMessage(                         Integer.parseInt(valueText));                     tcpServerResponse.append(                         ((POP3Client)tcpClient).getReplyString() +                          "\r\n");                                     }             } else if(selection == 2) { // is echo                 BufferedReader reader = new BufferedReader(                     new InputStreamReader(                         ((EchoTCPClient)tcpClient).getInputStream()));                                  PrintWriter writer =                     new PrintWriter(                         new OutputStreamWriter(                             ((EchoTCPClient)tcpClient).getOutputStream()), true);                                  // write to the server                 writer.println(valueText);                                  // read from the server                 tcpServerResponse.append(reader.readLine());                                  // streams are not closed here as there is no provision for the                 // user to send another stream of data. Thus the user has to                 // close the connection, which cleans up open streams.             } else if(selection == 3) { // is finger                 tcpServerResponse.setText(                     ((FingerClient)tcpClient).query(false, valueText));             } else if(selection == 9) { // is whois                 tcpServerResponse.setText(                     ((WhoisClient)tcpClient).query(valueText));             }         }catch(IOException ioex) { showError(ioex.getMessage()); return; }         finally {             singleValueField.setText("");             singleValueDialog.setVisible(false);         }     }//GEN-LAST:event_jButton3ActionPerformed     private void udpSingleValOKButton() {         // handles udp single value ok button clicks         String valueText = singleValueField.getText();         String valueLabel = singleValueLabel.getText();                  int selection = udpSelectionBox.getSelectedIndex();         try{             if(selection == 2) { // means handling echo                 if("Enter echo data (UDP):".equals(valueLabel)) {                      ((EchoUDPClient)udpClient).send(                         valueText.getBytes(),                          InetAddress.getByName(udpRemoteServer));                     byte[] data = new byte[valueText.length()];                                          ((EchoUDPClient)udpClient).receive(data);                     udpServerResponse.append(new String(data) + "\r\n");                 }             } else if(selection == 3) { // handling tftp                 File localFile = new File(valueText);                 if("Enter file path (TFTP-Receive):".equals(valueLabel)) {                     // means receiving a file via tftp                     FileOutputStream output = new FileOutputStream(localFile);                     ((TFTPClient)udpClient).receiveFile(                         localFile.getName(),                         TFTPClient.ASCII_MODE,                         output,                         InetAddress.getByName(udpRemoteServer));                     output.close();                 } else if("Enter file path (TFTP-Send):".equals(valueLabel)) {                     // means sending a file via tftp                     FileInputStream input = new FileInputStream(localFile);                     ((TFTPClient)udpClient).sendFile(                         localFile.getName(),                         TFTPClient.ASCII_MODE,                         input,                         InetAddress.getByName(udpRemoteServer));                     input.close();                 }                 udpClient.close();             }         }catch(IOException ioex) { showError(ioex.getMessage()); return; }         finally {             singleValueField.setText("");             singleValueDialog.setVisible(false);         }     }     private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton4ActionPerformed         singleValueDialog.setVisible(false);                  // if this is any of the following protocols disconnect as well         int currentSel = tcpSelectionBox.getSelectedIndex();         int currentUDPSel = udpSelectionBox.getSelectedIndex();         int currentSelTab = jTabbedPane1.getSelectedIndex();         try{             if((currentSel == 2) && (currentSelTab == 0)) {                  // is Echo for TCP                 handleDisconnect();             } else if((currentUDPSel == 3) && (currentSelTab == 1)) {                  // is TFTP for UDP                 handleUDPStop();             }         }catch(IOException ioex) {             System.err.println(ioex.getMessage());         }     }//GEN-LAST:event_jButton4ActionPerformed     private void jRadioButton8ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButton8ActionPerformed         // logout for ftp:         if(!checkValidConnection()) return;         try{             ((FTPClient)tcpClient).logout();             tcpServerResponse.append(((FTPClient)tcpClient).getReplyString());             handleDisconnect();         }catch(IOException ioex) { showError(ioex.getMessage()); }     }//GEN-LAST:event_jRadioButton8ActionPerformed     private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton1ActionPerformed         // login handling code for ftp, nntp, pop3:         String username = loginUsername.getText();         String password = loginPassword.getText();         loginDialog.setVisible(false);         try {             int currentSel = tcpSelectionBox.getSelectedIndex();             if(currentSel == 4) { // is FTP login                 ((FTPClient)tcpClient).login(username, password);                 tcpServerResponse.append(                     ((FTPClient)tcpClient).getReplyString());             } else if(currentSel == 5) { // is NNTP login                 ((NNTPClient)tcpClient).authenticate(username, password);                 tcpServerResponse.append(                     ((NNTPClient)tcpClient).getReplyString());             } else if(currentSel == 6) { // is POP3 login                 ((POP3Client)tcpClient).login(username, password);                 tcpServerResponse.append(                     ((POP3Client)tcpClient).getReplyString());             }         }catch(IOException ioex) { showError(ioex.getMessage()); }         finally{ loginUsername.setText(""); loginPassword.setText(""); }     }//GEN-LAST:event_jButton1ActionPerformed     private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jButton2ActionPerformed         // Add your handling code here:         loginDialog.setVisible(false);     }//GEN-LAST:event_jButton2ActionPerformed     private void jRadioButton4ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButton4ActionPerformed         // ftp login         if(!checkValidConnection()) return;          showDialog(loginDialog);     }//GEN-LAST:event_jRadioButton4ActionPerformed     private boolean checkValidConnection() {         if(!connected) { showError("Please connect first!"); return false; }         return true;     }          private void commandBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_commandBoxActionPerformed                  String commandString = commandBox.getText();         if(commandString == null || commandString.length() == 0) return;         try{             ProtocolHandler.handleTCPProtocol(                 tcpSelectionBox.getSelectedIndex(),                  tcpClient, this, commandString);         }catch(IOException ioex) { showError(ioex.getMessage()); }         finally{ commandBox.setText(""); }     }//GEN-LAST:event_commandBoxActionPerformed     /**      * This code handles the action events for the Connect button       */     private void tcpConnectButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_tcpConnectButtonActionPerformed         // if already connected, simply disconnect         if(connected) {             try {                 handleDisconnect();             }catch(IOException e) {                 showError(e.getMessage());             }             return;         }                  // if not connected, try and make a connection                 String server  = serverNameField.getText();         String port    = portNumberField.getText();         int portNumber;                  // check if the port number is a valid number         try{           portNumber = Integer.parseInt(port);         }catch(NumberFormatException nfe){             showError("Invalid port number: " + port);             return;         }                  // some basic checking of data         if(server == null || server.trim().length() == 0 ||            portNumber < 1){           showError("Invalid connection attributes");           return;         }                  // now using the factory create an instance of the client         // and connect         try{             tcpClient =                ClientFactory.getTCPClientInstance(                   tcpSelectionBox.getSelectedIndex());             tcpClient.connect(server, portNumber);         }catch(SocketException se){             showError(se.getMessage());             return;         }catch(IOException ioex){             showError(ioex.getMessage());             return;         }                  // if we come here means we have connected         connected = true;         tcpConnectButton.setText("Disconnect");         tcpSelectionBox.setEnabled(false);         jTabbedPane1.setEnabledAt(1, false);                  try {             ProtocolHandler.handleTCPProtocol(                 tcpSelectionBox.getSelectedIndex(),                  tcpClient,                  this);         }catch (IOException io) {             showError(io.getMessage());             io.printStackTrace();         }     }//GEN-LAST:event_tcpConnectButtonActionPerformed     private void udpSelectionBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_udpSelectionBoxActionPerformed         // Add your handling code here:         JComboBox box = (JComboBox)evt.getSource();         int selectedProtocolIdx = box.getSelectedIndex();                  udpCommandPanel.removeAll();                  if(selectedProtocolIdx == 3){ // is TFTP             udpCommandPanel.add(tftpPanel);         }else{             udpCommandPanel.add(udpStartButton);         }                  repaint();      }//GEN-LAST:event_udpSelectionBoxActionPerformed     private void jRadioButton1ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_jRadioButton1ActionPerformed         // change working directory for FTP         if(!checkValidConnection()) return;                  singleValueLabel.setText("New Directory:");         showDialog(singleValueDialog);     }//GEN-LAST:event_jRadioButton1ActionPerformed     private void tcpSelectionBoxActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_tcpSelectionBoxActionPerformed         // Add your handling code here:         // get the protocol selected         JComboBox box = (JComboBox)evt.getSource();         int selectedProtocolIdx = box.getSelectedIndex();         updateTCPPanels(selectedProtocolIdx);     }//GEN-LAST:event_tcpSelectionBoxActionPerformed          private void updateTCPPanels(int index){                 // based on what protocol has been selected,         // change the available commands panel         presetPanel.removeAll();                  // this local boolean indicates if the protocol currently being         // used requires a different command panel or not         boolean isPanelDifferent = false;                  switch(index){             case 4: {                 presetPanel.add(ftpPanel);                 isPanelDifferent = true;                 portNumberField.setText("21");                 break;             }// ftp             case 5: {                 presetPanel.add(nntpPanel);                 isPanelDifferent = true;                 portNumberField.setText("119");                 break;             } // nntp             case 6: {                 presetPanel.add(pop3Panel);                 isPanelDifferent = true;                 portNumberField.setText("110");                 break;             }             case 7: {                 presetPanel.add(smtpPanel);                 isPanelDifferent = true;                 portNumberField.setText("25");                 break;             } // smtp             case 0: {                 portNumberField.setText("19");                 break;             } // chargen             case 1: {                 portNumberField.setText("13");                 break;             } // daytime             case 2: {                 portNumberField.setText("7");                                 break;             } // echo             case 3: {                 portNumberField.setText("79");                 break;             } // finger             case 8: {                 portNumberField.setText("37");                 break;             } // time             case 9: {                 portNumberField.setText("43");                 break;             } // Whois         }                  if(isPanelDifferent) {             commandBox.setEnabled(true);         } else {             commandBox.setEnabled(false);             presetPanel.add(defaultPanel);         }                  repaint();     }          /** Exit the Application */     private void exitForm(java.awt.event.WindowEvent evt) {//GEN-FIRST:event_exitForm         System.exit(0);     }//GEN-LAST:event_exitForm          /**      * @param args the command line arguments      */     public static void main(String args[]) {         new ProtocolRunner().show();     }          private void showError(String msg){         JOptionPane.showMessageDialog(           this, msg, "Error", JOptionPane.ERROR_MESSAGE);         try {             if(connected) handleDisconnect();         }catch(IOException ioex) { System.err.println(ioex.getMessage()); }     }          void showDialog(JDialog dialog) {         dialog.pack();         dialog.setLocationRelativeTo(this);         dialog.setVisible(true);     }          final void handleUDPStop() throws IOException {         udpClient.close();         started = false;         udpServerResponse.setText("");         udpStartButton.setText("Start");         udpSelectionBox.setEnabled(true);         jTabbedPane1.setEnabledAt(0, true);         return;     }          final void handleDisconnect() throws IOException {         tcpClient.disconnect();         tcpServerResponse.setText("");         connected = false;         tcpConnectButton.setText("Connect");         tcpSelectionBox.setEnabled(true);         jTabbedPane1.setEnabledAt(1, true);         return;     }          final JTextArea getTCPServerResponse() {         return this.tcpServerResponse;     }     final JTextArea getUDPServerResponse() {         return this.udpServerResponse;     }          final JDialog getSingleValueDialog() {         return this.singleValueDialog;     }     final JLabel getSingleValueLabel() {         return this.singleValueLabel;     }              final JTextField getSingleValueText() {         return this.singleValueField;     }     final String getUDPRemoteServer() {         return this.udpRemoteServer;     }          // non GUI variables     // identifies if a connection is made for tcp     private boolean connected;          // identifies if a udp session is started     private boolean started;             // the remote udp server     private String udpRemoteServer;          // the current client for tcp connections     SocketClient tcpClient;          // the current client for udp connections     DatagramSocketClient udpClient;          // Variables declaration - do not modify//GEN-BEGIN:variables     private javax.swing.JTextField commandBox;     private javax.swing.JPanel defaultPanel;     private javax.swing.JTextField fromField;     private javax.swing.ButtonGroup ftpButtonGroup;     private javax.swing.JPanel ftpPanel;     private javax.swing.JButton jButton1;     private javax.swing.JButton jButton2;     private javax.swing.JButton jButton3;     private javax.swing.JButton jButton4;     private javax.swing.JButton jButton5;     private javax.swing.JButton jButton6;     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 jLabel9;     private javax.swing.JPanel jPanel1;     private javax.swing.JPanel jPanel10;     private javax.swing.JPanel jPanel11;     private javax.swing.JPanel jPanel12;     private javax.swing.JPanel jPanel13;     private javax.swing.JPanel jPanel14;     private javax.swing.JPanel jPanel15;     private javax.swing.JPanel jPanel16;     private javax.swing.JPanel jPanel17;     private javax.swing.JPanel jPanel18;     private javax.swing.JPanel jPanel19;     private javax.swing.JPanel jPanel2;     private javax.swing.JPanel jPanel3;     private javax.swing.JPanel jPanel4;     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.JRadioButton jRadioButton1;     private javax.swing.JRadioButton jRadioButton10;     private javax.swing.JRadioButton jRadioButton11;     private javax.swing.JRadioButton jRadioButton12;     private javax.swing.JRadioButton jRadioButton13;     private javax.swing.JRadioButton jRadioButton14;     private javax.swing.JRadioButton jRadioButton15;     private javax.swing.JRadioButton jRadioButton16;     private javax.swing.JRadioButton jRadioButton17;     private javax.swing.JRadioButton jRadioButton18;     private javax.swing.JRadioButton jRadioButton19;     private javax.swing.JRadioButton jRadioButton2;     private javax.swing.JRadioButton jRadioButton20;     private javax.swing.JRadioButton jRadioButton21;     private javax.swing.JRadioButton jRadioButton22;     private javax.swing.JRadioButton jRadioButton23;     private javax.swing.JRadioButton jRadioButton24;     private javax.swing.JRadioButton jRadioButton25;     private javax.swing.JRadioButton jRadioButton26;     private javax.swing.JRadioButton jRadioButton3;     private javax.swing.JRadioButton jRadioButton4;     private javax.swing.JRadioButton jRadioButton5;     private javax.swing.JRadioButton jRadioButton6;     private javax.swing.JRadioButton jRadioButton7;     private javax.swing.JRadioButton jRadioButton8;     private javax.swing.JRadioButton jRadioButton9;     private javax.swing.JScrollPane jScrollPane1;     private javax.swing.JScrollPane jScrollPane2;     private javax.swing.JScrollPane jScrollPane3;     private javax.swing.JTabbedPane jTabbedPane1;     private javax.swing.JDialog loginDialog;     private javax.swing.JPasswordField loginPassword;     private javax.swing.JTextField loginUsername;     private javax.swing.JTextArea messageArea;     private javax.swing.JDialog multipleValueDialog;     private javax.swing.ButtonGroup nntpButtonGroup;     private javax.swing.JPanel nntpPanel;     private javax.swing.ButtonGroup pop3ButtonGroup;     private javax.swing.JPanel pop3Panel;     private javax.swing.JTextField portNumberField;     private javax.swing.JPanel presetPanel;     private javax.swing.JTextField serverNameField;     private javax.swing.JDialog singleValueDialog;     private javax.swing.JTextField singleValueField;     private javax.swing.JLabel singleValueLabel;     private javax.swing.ButtonGroup smtpButtonGroup;     private javax.swing.JPanel smtpPanel;     private javax.swing.JTextField subjectField;     private javax.swing.JButton tcpConnectButton;     private javax.swing.JComboBox tcpSelectionBox;     private javax.swing.JTextArea tcpServerResponse;     private javax.swing.JPanel tftpPanel;     private javax.swing.ButtonGroup tftpPanelButtonGroup;     private javax.swing.JPanel udpCommandPanel;     private javax.swing.JTextField udpRemoteServerField;     private javax.swing.JComboBox udpSelectionBox;     private javax.swing.JTextArea udpServerResponse;     private javax.swing.JButton udpStartButton;     private javax.swing.JTextField variableField;     private javax.swing.JLabel variableLabel;     // End of variables declaration//GEN-END:variables      } ------------------------------------------------------------------ /*  * ClientFactory.java  *  * Created on December 31, 2003, 12:15 PM  */ import org.apache.commons.net.*; import org.apache.commons.net.ftp.FTPClient; import org.apache.commons.net.smtp.SMTPClient; import org.apache.commons.net.pop3.POP3Client; import org.apache.commons.net.nntp.NNTPClient; import org.apache.commons.net.tftp.TFTPClient; /**  * Factory for creation of singleton clients.  * @author  vgoyal  */ class ClientFactory {          public static SocketClient getTCPClientInstance(int clientType) {        switch(clientType) {             case 0: { // is chargen                 if(charGenTCPClient == null) {                     charGenTCPClient = new CharGenTCPClient();                 }                 return charGenTCPClient;             }            case 1: { // is daytime                 if(daytimeTCPClient == null) {                    daytimeTCPClient = new DaytimeTCPClient();                }                return daytimeTCPClient;            }            case 2: { // is echo                if(echoTCPClient == null) {                    echoTCPClient = new EchoTCPClient();                }                return echoTCPClient;            }            case 3: { // is finger                if(fingerClient == null) {                    fingerClient = new FingerClient();                }                return fingerClient;            }            case 4: { // is ftp                if(ftpClient == null) {                    ftpClient = new FTPClient();                }                return ftpClient;            }            case 5: { // is nntp                if(nntpClient == null) {                    nntpClient = new NNTPClient();                }                return nntpClient;            }            case 6: { // is pop3                if(pop3Client == null) {                    pop3Client = new POP3Client();                }                return pop3Client;            }            case 7: { // is smtp                if(smtpClient == null) {                    smtpClient = new SMTPClient();                }                return smtpClient;            }            case 8: { // is time                if(timeTCPClient == null) {                    timeTCPClient = new TimeTCPClient();                }                return timeTCPClient;            }            case 9: { // is whois                if(whoisClient == null) {                    whoisClient = new WhoisClient();                }                return whoisClient;            }         }         return null;     }          public static DatagramSocketClient getUDPClientInstance(int clientType) {        switch(clientType) {             case 0: { // is chargen                 if(charGenUDPClient == null) {                     charGenUDPClient = new CharGenUDPClient();                 }                 return charGenUDPClient;             }            case 1: { // is daytime                if(daytimeUDPClient == null) {                    daytimeUDPClient = new DaytimeUDPClient();                }                return daytimeUDPClient;            }            case 2: { // is echo                if(echoUDPClient == null) {                    echoUDPClient = new EchoUDPClient();                }                return echoUDPClient;            }            case 3: { // is tftp                if(tftpClient == null) {                    tftpClient = new TFTPClient();                }                return tftpClient;            }            case 4: { // is time                if(timeUDPClient == null) {                    timeUDPClient = new TimeUDPClient();                }                return timeUDPClient;            }         }        return null;     }          // TCP clients     private static CharGenTCPClient charGenTCPClient;     private static DaytimeTCPClient daytimeTCPClient;     private static EchoTCPClient    echoTCPClient;     private static FingerClient     fingerClient;     private static FTPClient        ftpClient;     private static NNTPClient       nntpClient;     private static POP3Client       pop3Client;     private static SMTPClient       smtpClient;     private static TimeTCPClient    timeTCPClient;     private static WhoisClient      whoisClient;          // UDP clients     private static CharGenUDPClient charGenUDPClient;     private static DaytimeUDPClient daytimeUDPClient;     private static EchoUDPClient    echoUDPClient;     private static TFTPClient       tftpClient;     private static TimeUDPClient    timeUDPClient; } ----------------------------------------------------------- /*  * ProtocolHandler.java  *  * Created on December 28, 2003, 1:05 PM  */ import org.apache.commons.net.*; import org.apache.commons.net.ftp.*; import org.apache.commons.net.nntp.*; import org.apache.commons.net.pop3.*; import org.apache.commons.net.smtp.*; import org.apache.commons.net.tftp.*; import java.util.Date; import java.io.InputStream; import java.io.IOException; import java.net.InetAddress; import java.io.BufferedReader; import java.io.InputStreamReader; /**  * This class handles protocol commands that are either typed in or do not   * require much manual intervention.  * @author  vgoyal  */ public class ProtocolHandler {          public static void handleTCPProtocol(         int protocolId, SocketClient client,          ProtocolRunner runner, String commandString)          throws IOException {                  switch(protocolId) {             case 0: { // is chargen                 handleTCPChargen((CharGenTCPClient)client, runner);                 return;             }             case 1: { // is daytime                 handleTCPDaytime((DaytimeTCPClient)client, runner);                 return;             }             case 2: { // is echo                 handleTCPEcho((EchoTCPClient)client, runner);                 return;             }               case 3: { // is finger                 handleFinger((FingerClient)client, runner);                 return;             }                           case 4: { // is ftp                 handleFTP((FTPClient)client, runner, commandString);                 return;             }             case 5: { // is nntp                 handleNNTP((NNTPClient)client, runner, commandString);                 return;             }             case 6: { // is pop3                 handlePOP3((POP3Client)client, runner, commandString);                 return;             }             case 7: { // is smtp                 handleSMTP((SMTPClient)client, runner, commandString);                 return;             }             case 8: { // is Time                 handleTCPTime((TimeTCPClient)client, runner);                 return;             }             case 9: { // is Whois                 handleWhois((WhoisClient)client, runner);                 return;             }         }     }         public static void handleTCPProtocol(         int protocolId, SocketClient client, ProtocolRunner runner)           throws IOException {             handleTCPProtocol(protocolId, client, runner, null);     }          public static void handleUDPProtocol(         int protocolId, DatagramSocketClient client, ProtocolRunner runner)         throws IOException {         switch(protocolId) {             case 0: { // is chargen                 handleUDPChargen((CharGenUDPClient)client, runner);                 return;             }             case 1: { // is daytime                 handleUDPDaytime((DaytimeUDPClient)client, runner);                 return;             }             case 2: { // is echo                 handleUDPEcho((EchoUDPClient)client, runner);                 return;             }             case 4: { // is time                 handleUDPTime((TimeUDPClient)client, runner);                 return;             }         }                 }              private static void handleUDPChargen(         CharGenUDPClient client, ProtocolRunner runner)          throws IOException {                      int packets = 500;                 while(packets-- > 0) {             client.send(InetAddress.getByName(runner.getUDPRemoteServer()));             runner.getUDPServerResponse().append(new String(client.receive()));         }     }     private static void handleUDPDaytime(         DaytimeUDPClient client, ProtocolRunner runner)          throws IOException {                         runner.getUDPServerResponse().append(                 client.getTime(                     InetAddress.getByName(runner.getUDPRemoteServer()))                      + "\r\n");     }     private static void handleUDPEcho(         EchoUDPClient client, ProtocolRunner runner)          throws IOException {                      // use the runner to get data from the user to send to echo server         runner.getSingleValueLabel().setText("Enter echo data (UDP):");         runner.showDialog(runner.getSingleValueDialog());     }                  private static void handleUDPTime(         TimeUDPClient client, ProtocolRunner runner)          throws IOException {                      long origTime = client.getTime(InetAddress.getByName(             runner.getUDPRemoteServer()));         runner.getUDPServerResponse().append(         "Time returned from server: " +  origTime + "\r\n" +         "Converted to Date: " +          new Date(((origTime) - TimeUDPClient.SECONDS_1900_TO_1970)*1000L));     }         private static void handleTCPChargen(         CharGenTCPClient client, ProtocolRunner runner)          throws IOException {         // simply grab the resulting inputstream to show the return by the         // remote server for upto 500 lines         BufferedReader chargenInput =              new BufferedReader(new InputStreamReader(client.getInputStream()));                  int lines = 500;         while(lines-- > 0) {             runner.getTCPServerResponse().append(                 chargenInput.readLine() + "\r\n");         }     }          private static void handleTCPDaytime(         DaytimeTCPClient client, ProtocolRunner runner)          throws IOException {                         runner.getTCPServerResponse().append(client.getTime() + "\r\n");     }     private static void handleTCPTime(         TimeTCPClient client, ProtocolRunner runner)          throws IOException {             long origTime = client.getTime();                          // remember that the long time returned from the server is the              // seconds since midnight Jan 1900 and Date in Java is number of             // seconds since midnight Jan 1970. NET TCPClient provides the time             // in both formats but you cannot call them both one after another             // as the internal getDate uses getTime, but the line has already             // been closed if you have called getTime before.             runner.getTCPServerResponse().append(             "Time returned from server: " +  origTime + "\r\n" +             "Converted to Date: " +              new Date(((origTime) - TimeTCPClient.SECONDS_1900_TO_1970)*1000L));     }     private static void handleTCPEcho(         EchoTCPClient client, ProtocolRunner runner)          throws IOException {                      // use the runner to get data from the user to send to echo server         runner.getSingleValueLabel().setText("Enter echo data:");         runner.showDialog(runner.getSingleValueDialog());     }              private static void handleFinger(         FingerClient client, ProtocolRunner runner)          throws IOException {                      // use the runner to get data from the user to send to echo server         runner.getSingleValueLabel().setText("Enter query:");         runner.showDialog(runner.getSingleValueDialog());     }     private static void handleWhois(         WhoisClient client, ProtocolRunner runner)          throws IOException {                      // use the runner to get data from the user to send to echo server         runner.getSingleValueLabel().setText("Enter Whois query:");         runner.showDialog(runner.getSingleValueDialog());     }              private static void handleFTP(         FTPClient client,          ProtocolRunner runner,          String commandString)          throws IOException {                  if(commandString == null) { // means just connected                                  // check if the server response was valid             if(!FTPReply.isPositiveCompletion(client.getReplyCode())) {                 runner.handleDisconnect();                 return;             }                      } else { // need to handle a command             client.sendCommand(commandString);         }                  runner.getTCPServerResponse().append(client.getReplyString());     }     private static void handleNNTP(         NNTPClient client,          ProtocolRunner runner,          String commandString)          throws IOException {                  if(commandString == null) { // means just connected                              // check if the server response was valid             if(!NNTPReply.isPositiveCompletion(client.getReplyCode())) {                 runner.handleDisconnect();                 return;             }                      } else { // need to handle a command             client.sendCommand(commandString);         }                  runner.getTCPServerResponse().append(client.getReplyString());     }     private static void handlePOP3(         POP3Client client,          ProtocolRunner runner,          String commandString)          throws IOException {                  if(commandString == null) { // means just connected                  return;                     } else { // need to handle a command             client.sendCommand(commandString);         }                  runner.getTCPServerResponse().append(client.getReplyString());     }     private static void handleSMTP(         SMTPClient client,          ProtocolRunner runner,          String commandString)          throws IOException {                  if(commandString == null) { // means just connected              // check if the server response was valid             if(!SMTPReply.isPositiveCompletion(client.getReplyCode())) {                 runner.handleDisconnect();                 return;             }         } else { // need to handle a command             client.sendCommand(commandString);         }                  runner.getTCPServerResponse().append(client.getReplyString());     }       } public class MultiProtocolHandler { } /*  * Command.java  *  * Created on December 28, 2003, 3:10 PM  */ import java.util.Vector; import java.util.Iterator; import java.lang.IllegalArgumentException; /**  * A Command is a protocol independent class that implements commands.  * A Command may have arguments, like USER for FTP, or it may be standalone  * as in logout, again for ftp. A command can only be created by calling the  * Command Constructor with the name of the command. To add arguments to the  * command, use the addArgument method.  * @author  vgoyal  */ public class Command {          private String commandName;          private Vector commandArguments;          /** Creates a new instance of Command */     public Command(String commandName) {         if(commandName == null || commandName.length() == 0) {             throw new IllegalArgumentException("Invalid Command Name");         }                  this.commandName = commandName;     }          public String getCommandName() {         return this.commandName;     }          public void addArgument(String argValue) {         if(argValue == null ||             argValue.length() == 0) {            throw new IllegalArgumentException("Invalid Command Argument");         }                  if(commandArguments == null) commandArguments = new Vector();                  commandArguments.add(argValue);     }          public int getCountCommandArguments() {         if(commandArguments == null) return 0;         else return commandArguments.size();     }          /**      * Returns space delimited String containing all arguments to this command      */     public String getArguments() {         if(getCountCommandArguments() == 0) return "";                  String returnVal = "";         Iterator itr = commandArguments.iterator();         while(itr.hasNext()){             returnVal = returnVal + " " + itr.next();         }                  return returnVal;     }      }                     ProtocolRunner.zip( 281 k)