Exercises the various protocols available in the Commons Net Package : Net « Apache Common « Java

Java
1. 2D Graphics GUI
2. 3D
3. Advanced Graphics
4. Ant
5. Apache Common
6. Chart
7. Class
8. Collections Data Structure
9. Data Type
10. Database SQL JDBC
11. Design Pattern
12. Development Class
13. EJB3
14. Email
15. Event
16. File Input Output
17. Game
18. Generics
19. GWT
20. Hibernate
21. I18N
22. J2EE
23. J2ME
24. JDK 6
25. JNDI LDAP
26. JPA
27. JSP
28. JSTL
29. Language Basics
30. Network Protocol
31. PDF RTF
32. Reflection
33. Regular Expressions
34. Scripting
35. Security
36. Servlets
37. Spring
38. Swing Components
39. Swing JFC
40. SWT JFace Eclipse
41. Threads
42. Tiny Application
43. Velocity
44. Web Services SOA
45. XML
Java Tutorial
Java Source Code / Java Documentation
Java Open Source
Jar File Download
Java Articles
Java Products
Java by API
Photoshop Tutorials
Maya Tutorials
Flash Tutorials
3ds-Max Tutorials
Illustrator Tutorials
GIMP Tutorials
C# / C Sharp
C# / CSharp Tutorial
C# / CSharp Open Source
ASP.Net
ASP.NET Tutorial
JavaScript DHTML
JavaScript Tutorial
JavaScript Reference
HTML / CSS
HTML CSS Reference
C / ANSI-C
C Tutorial
C++
C++ Tutorial
Ruby
PHP
Python
Python Tutorial
Python Open Source
SQL Server / T-SQL
SQL Server / T-SQL Tutorial
Oracle PL / SQL
Oracle PL/SQL Tutorial
PostgreSQL
SQL / MySQL
MySQL Tutorial
VB.Net
VB.Net Tutorial
Flash / Flex / ActionScript
VBA / Excel / Access / Word
XML
XML Tutorial
Microsoft Office PowerPoint 2007 Tutorial
Microsoft Office Excel 2007 Tutorial
Microsoft Office Word 2007 Tutorial
Java » Apache Common » NetScreenshots 
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(33));

        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(33));

        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(11));

        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(20));

        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(10));

        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(05));

        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(2253));

        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(10));

        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(1030));

        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(1050));

        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(1050));

        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(3233));

        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"012));
        jScrollPane1.setViewportView(tcpServerResponse);

        jPanel4.add(jScrollPane1, java.awt.BorderLayout.CENTER);

        jPanel7.setLayout(new java.awt.GridLayout(1250));

        presetPanel.setLayout(new java.awt.BorderLayout());

        presetPanel.setBorder(new javax.swing.border.TitledBorder("Preset Commands"));
        jLabel5.setFont(new java.awt.Font("Dialog"312));
        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(2105));

        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(20));

        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(10));

        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"012));
        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(0false);
        
        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 == nullreturn;
            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 == nullreturn;
            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 == nullreturn;
                    
                    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 == nullreturn;
                    
                    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())}
        finallyloginUsername.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() == 0return;
        try{
            ProtocolHandler.handleTCPProtocol(
                tcpSelectionBox.getSelectedIndex()
                tcpClient, this, commandString);
        }catch(IOException ioex) { showError(ioex.getMessage())}
        finallycommandBox.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() == ||
           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(1false);
        
        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(connectedhandleDisconnect();
        }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(0true);
        return;
    }
    
    final void handleDisconnect() throws IOException {
        tcpClient.disconnect();
        tcpServerResponse.setText("");
        connected = false;
        tcpConnectButton.setText("Connect");
        tcpSelectionBox.setEnabled(true);
        jTabbedPane1.setEnabledAt(1true);
        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 == nullcommandArguments = new Vector();
        
        commandArguments.add(argValue);
    }
    
    public int getCountCommandArguments() {
        if(commandArguments == nullreturn 0;
        else return commandArguments.size();
    }
    
    /**
     * Returns space delimited String containing all arguments to this command
     */
    public String getArguments() {
        if(getCountCommandArguments() == 0return "";
        
        String returnVal = "";
        Iterator itr = commandArguments.iterator();
        while(itr.hasNext()){
            returnVal = returnVal + " " + itr.next();
        }
        
        return returnVal;
    }
    
}

           
       
ProtocolRunner.zip( 281 k)
Related examples in the same category
www.java2java.com | Contact Us
Copyright 2009 - 12 Demo Source and Support. All rights reserved.
All other trademarks are property of their respective owners.