This server program includes several major changes from the basic server. First, it includes a rather substantial method,
buildUI, to construct the user interface. Second, it includes anactionPerformedmethod where button events are processed. Third, and most important, note the changes in the method that handles the connection and the I/O on it.import java.net.*; import java.io.*; import java.util.*; import java.awt.*; import java.awt.event.*; public class Server_Second extends Frame implements ActionListener, WindowListener { //**************** single-threaded server, with UI //**************** default runs on jbspc.cs.unc.edu:8901 ServerSocket listenSocket; Socket connection; InputStream inStream; DataInputStream inDataStream; OutputStream outStream; DataOutputStream outDataStream; String message; TextField hostDisplay, portDisplay; TextArea logDisplay, msgDisplay; Panel topPanel; Panel middlePanel; Panel buttonPanel; Button listenButton, quitButton; public static final String DEFAULT_HOST = "jbspc.cs.unc.edu"; public static final int DEFAULT_PORT = 8901; String host; int port; public Server_Second ( String s) { super ( s ); buildUI (); } // end Server_Second constructor // ************** Primary Listen & Respond Method public void connectClient ( ) { if ( ! ( portDisplay.getText () ).equals ( "" ) ) port = Integer.parseInt ( portDisplay.getText () ); else port = DEFAULT_PORT; try { listenSocket = new ServerSocket ( port ); logDisplay.setText ( "Server running on "+host+", port "+port+"\n" ); connection = listenSocket.accept (); outStream = connection.getOutputStream (); outDataStream = new DataOutputStream ( outStream ); inStream = connection.getInputStream (); inDataStream = new DataInputStream ( inStream ); logDisplay.appendText ( "Connection request received\n" ); logDisplay.appendText ( "Message, below, received\n" ); try { message = inDataStream.readUTF (); msgDisplay.setForeground ( Color.red ); msgDisplay.appendText ( message ); } // end try for input catch ( EOFException except ) { logDisplay.appendText ( "message EOF received\n" ); } // end catch catch ( IOException except ) { System.out.println ( "IO Exception raised" ); except.printStackTrace (); } // end catch System.out.println ("Getting ready to return message"); message = msgDisplay.getText (); logDisplay.appendText ( "Message, below, returned to client \n" ); outDataStream.writeUTF ( message ); logDisplay.appendText ( "Connection closed\n" ); connection.close (); return; } // end try catch ( IOException except) { except.printStackTrace (); } // end catch } // end connectClient // ************** public static void main ( String [ ] args ) { Server_Second server = new Server_Second ( "Server_Second" ); server.addWindowListener ( server ); } // end main //*********** Utility Methods *********** // ************** public void buildUI () { try { InetAddress here = InetAddress.getLocalHost (); host = here.getHostName (); } catch (UnknownHostException e) { ;} hostDisplay = new TextField ( host, 30 ); portDisplay = new TextField ( Integer.toString ( DEFAULT_PORT ), 4 ); topPanel = new Panel (); topPanel.setLayout ( new GridLayout ( 2, 1 ) ); topPanel.add ( hostDisplay ); topPanel.add ( portDisplay ); logDisplay = new TextArea ( 40, 10 ); msgDisplay = new TextArea ( 40, 10 ); middlePanel = new Panel (); middlePanel.setLayout ( new GridLayout ( 2, 1 ) ); middlePanel.add ( logDisplay ); middlePanel.add ( msgDisplay ); listenButton = new Button ( "Listen" ); quitButton = new Button ( "Quit" ); listenButton.addActionListener ( this ); quitButton.addActionListener ( this ); buttonPanel = new Panel ( ); buttonPanel.add ( listenButton ); buttonPanel.add ( quitButton ); add ( "North", topPanel ); add ( "Center", middlePanel ); add ( "South", buttonPanel ); resize ( 400, 450 ); show (); } // end buildUI //*********** Interface Methods *********** //**** ActionListener methods public void actionPerformed ( ActionEvent e ) { Object s = e.getSource(); // *** process Button actions if ( s instanceof Button ) { if ( s == listenButton ) { connectClient (); } // end listenButton if ( s == quitButton ) { hide (); dispose (); System.exit ( 0 ); } // end quitButton } // end process Button actions } // end actionPerformed //**** WindowListener methods public void windowActivated ( WindowEvent e ) { } public void windowDeactivated ( WindowEvent e ) { } public void windowOpened ( WindowEvent e ) { } public void windowClosed ( WindowEvent e ) { } public void windowClosing ( WindowEvent e ) { hide (); dispose (); System.exit(0); } public void windowIconified ( WindowEvent e ) { } public void windowDeiconified ( WindowEvent e ) { } } // end Server_Second