⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 server.java

📁 Messenger Client Java
💻 JAVA
字号:
 import java.io.EOFException;
    import java.io.IOException;
    import java.io.ObjectInputStream;
    import java.io.ObjectOutputStream;
    import java.net.ServerSocket;
    import java.net.Socket;      
import java.net.InetAddress;
   import java.awt.BorderLayout;
   import java.awt.event.ActionEvent;
   import java.awt.event.ActionListener;
   import javax.swing.JFrame;
   import javax.swing.JScrollPane;
   import javax.swing.JTextArea;
   import javax.swing.JTextField;
   import javax.swing.SwingUtilities;
 
   public class Server extends JFrame
   {
      private JTextField enterField; // inputs message from user
      private JTextArea displayArea; // display information to user
      private ObjectOutputStream output; // output stream to client
      private ObjectInputStream input; // input stream from client
      private ServerSocket server; // server socket     
      private Socket connection; // connection to client
      private int counter = 1; // counter of number of connections
 

      public Server()
      {
         super ( "Server" );
 
         enterField = new JTextField(); // create enterField
         enterField.setEditable( false );
         enterField.addActionListener(
            new ActionListener()
            {

               public void actionPerformed( ActionEvent event )
               {
                  sendData( event.getActionCommand() );
                  enterField.setText( "" );
               } // end method actionPerformed
            } // end anonymous inner class
         ); // end call to addActionListener
 
         add( enterField, BorderLayout.NORTH );
 
         displayArea = new JTextArea(); // create displayArea
         add( new JScrollPane( displayArea ), BorderLayout.CENTER );
 
         setSize( 300, 150 ); // set size of window
         setVisible( true ); // show window
      } // end Server constructor
 

      public void runServer()
      {
         try // set up server to receive connections; process connections
         {
            server = new ServerSocket( 12345, 100 ); // create ServerSocket
 
            while ( true )
            {
               try
               {
                  waitForConnection(); // wait for a connection
                  getStreams(); // get input & output streams
                 processConnection(); // process connection
               } // end try
               catch ( EOFException eofException )
               {
                  displayMessage( "\nServer terminated connection" );
               } // end catch
               finally
               {
                  closeConnection(); // close connection
                  counter++;
               } // end finally
            } // end while
         } // end try
         catch ( IOException ioException )
         {
            ioException.printStackTrace();
         } // end catch
      } // end method runServer
 

      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() );
      } // end method waitForConnection
 

      private void getStreams() throws IOException
     {

        output = new ObjectOutputStream( connection.getOutputStream() ); 
        output.flush(); // flush output buffer to send header information
 

        input = new ObjectInputStream( connection.getInputStream() );
 
        displayMessage( "\nGot I/O streams\n" );
     } // end method getStreams
 

        private void processConnection() throws IOException
     {
        String message = "Connection successful";
        sendData( message ); // send connection successful message
 

        setTextFieldEditable( true );
 
        do // process messages sent from client
        {
           try // read message and display it
           {
              message = ( String ) input.readObject(); // read new message
              displayMessage( "\n" + message ); // display message
           } // end try
           catch ( ClassNotFoundException classNotFoundException )
           {
              displayMessage( "\nUnknown object type received" );
           } // end catch
 
        } while ( !message.equals( "CLIENT>>> TERMINATE" ) );
     } // end method processConnection
 

     private void closeConnection()
     {
        displayMessage( "\nTerminating connection\n" );
        setTextFieldEditable( false ); // disable enterField
 
        try
        {
           output.close(); // close output stream
           input.close(); // close input stream  
           connection.close(); // close socket   
        } // end try
        catch ( IOException ioException )
        {
           ioException.printStackTrace();
        } // end catch
     } // end method closeConnection


     private void sendData( String message )
     {
        try // send object to client
        {
           output.writeObject( InetAddress.getLocalHost().getHostName()+" >>> " + message );
           output.flush(); // flush output to client    
           displayMessage( "\n"+ InetAddress.getLocalHost().getHostName()+" >>> " + message );
        } // end try
        catch ( IOException ioException )
        {
           displayArea.append( "\nError writing object" );
        } // end catch
     } // end method sendData
 

     private void displayMessage( final String messageToDisplay )
     {
        SwingUtilities.invokeLater(
           new Runnable()
           {
              public void run() // updates displayArea
              {
                 displayArea.append( messageToDisplay ); // append message
              } // end method run
           } // end anonymous inner class
        ); // end call to SwingUtilities.invokeLater
     } // end method displayMessage
 

     private void setTextFieldEditable( final boolean editable )
     {
        SwingUtilities.invokeLater(
           new Runnable()
           {
              public void run() // sets enterField's editability
              {
                 enterField.setEditable( editable );
              } // end method run
           }  // end inner class
        ); // end call to SwingUtilities.invokeLater
     } // end method setTextFieldEditable
  }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -