Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Fig. 18.4: Server.java
- // Set up a Server that will receive a connection from a client, send
- // a string to the client, and close the connection.
- import java.io.*;
- import java.net.*;
- import java.awt.*;
- import java.awt.event.*;
- import javax.swing.*;
- public class Server extends JFrame {
- private JTextField enterField;
- private JTextArea displayArea;
- private ObjectOutputStream output;
- private ObjectInputStream input;
- private ServerSocket server;
- private Socket connection;
- private int counter = 1;
- // set up GUI
- public Server()
- {
- super( "Server" );
- Container container = getContentPane();
- // create enterField and register listener
- enterField = new JTextField();
- enterField.setEditable( false );
- enterField.addActionListener(
- new ActionListener() {
- // send message to client
- public void actionPerformed( ActionEvent event )
- {
- sendData( event.getActionCommand() );
- enterField.setText( "" );
- }
- }
- );
- container.add( enterField, BorderLayout.NORTH );
- // create displayArea
- displayArea = new JTextArea();
- container.add( new JScrollPane( displayArea ),
- BorderLayout.CENTER );
- setSize( 300, 150 );
- setVisible( true );
- } // end Server constructor
- // set up and run server
- public void runServer()
- {
- // set up server to receive connections; process connections
- try {
- // Step 1: Create a ServerSocket.
- server = new ServerSocket( 12345, 100 );
- while ( true ) {
- try {
- waitForConnection(); // Step 2: Wait for a connection.
- getStreams(); // Step 3: Get input & output streams.
- processConnection(); // Step 4: Process connection.
- }
- // process EOFException when client closes connection
- catch ( EOFException eofException ) {
- System.err.println( "Server terminated connection" );
- }
- finally {
- closeConnection(); // Step 5: Close connection.
- ++counter;
- }
- } // end while
- } // end try
- // process problems with I/O
- catch ( IOException ioException ) {
- ioException.printStackTrace();
- }
- } // end method runServer
- // wait for connection to arrive, then display connection info
- private void waitForConnection() throws IOException
- {
- displayMessage( "Waiting for connection\n" );
- connection = server.accept(); // allow server to accept connection
- displayMessage( "Connection " + counter + " received from: " +
- connection.getInetAddress().getHostName() );
- }
- // get streams to send and receive data
- private void getStreams() throws IOException
- {
- // set up output stream for objects
- output = new ObjectOutputStream( connection.getOutputStream() );
- output.flush(); // flush output buffer to send header information
- // set up input stream for objects
- input = new ObjectInputStream( connection.getInputStream() );
- displayMessage( "\nGot I/O streams\n" );
- }
- // process connection with client
- private void processConnection() throws IOException
- {
- // send connection successful message to client
- String message = "Connection successful";
- sendData( message );
- // enable enterField so server user can send messages
- setTextFieldEditable( true );
- do { // process messages sent from client
- // read message and display it
- try {
- message = ( String ) input.readObject();
- displayMessage( "\n" + message );
- }
- // catch problems reading from client
- catch ( ClassNotFoundException classNotFoundException ) {
- displayMessage( "\nUnknown object type received" );
- }
- } while ( !message.equals( "CLIENT>>> TERMINATE" ) );
- } // end method processConnection
- // close streams and socket
- private void closeConnection()
- {
- displayMessage( "\nTerminating connection\n" );
- setTextFieldEditable( false ); // disable enterField
- try {
- output.close();
- input.close();
- connection.close();
- }
- catch( IOException ioException ) {
- ioException.printStackTrace();
- }
- }
- // send message to client
- private void sendData( String message )
- {
- // send object to client
- try {
- output.writeObject( "SERVER>>> " + message );
- output.flush();
- displayMessage( "\nSERVER>>> " + message );
- }
- // process problems sending object
- catch ( IOException ioException ) {
- displayArea.append( "\nError writing object" );
- }
- }
- // utility method called from other threads to manipulate
- // displayArea in the event-dispatch thread
- private void displayMessage( final String messageToDisplay )
- {
- // display message from event-dispatch thread of execution
- SwingUtilities.invokeLater(
- new Runnable() { // inner class to ensure GUI updates properly
- public void run() // updates displayArea
- {
- displayArea.append( messageToDisplay );
- displayArea.setCaretPosition(
- displayArea.getText().length() );
- }
- } // end inner class
- ); // end call to SwingUtilities.invokeLater
- }
- // utility method called from other threads to manipulate
- // enterField in the event-dispatch thread
- private void setTextFieldEditable( final boolean editable )
- {
- // display message from event-dispatch thread of execution
- SwingUtilities.invokeLater(
- new Runnable() { // inner class to ensure GUI updates properly
- public void run() // sets enterField's editability
- {
- enterField.setEditable( editable );
- }
- } // end inner class
- ); // end call to SwingUtilities.invokeLater
- }
- public static void main( String args[] )
- {
- Server application = new Server();
- application.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
- application.runServer();
- }
- } // end class Server
- /**************************************************************************
- * (C) Copyright 1992-2003 by Deitel & Associates, Inc. and *
- * Prentice Hall. All Rights Reserved. *
- * *
- * DISCLAIMER: The authors and publisher of this book have used their *
- * best efforts in preparing the book. These efforts include the *
- * development, research, and testing of the theories and programs *
- * to determine their effectiveness. The authors and publisher make *
- * no warranty of any kind, expressed or implied, with regard to these *
- * programs or to the documentation contained in these books. The authors *
- * and publisher shall not be liable in any event for incidental or *
- * consequential damages in connection with, or arising out of, the *
- * furnishing, performance, or use of these programs. *
- *************************************************************************/
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement