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

📄 server.java

📁 Java网络课程设计作业。用c/s模式实现。
💻 JAVA
字号:
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;

   //服务端构造函数
   public Server()
   {
      super( "服务端Server" );

      Container container = getContentPane();

      

      // 建立消息显示区域
      displayArea = new JTextArea();
      container.add( new JScrollPane( displayArea ),
         BorderLayout.CENTER );
      
      // 建立一个单文行发送消息到客户端
      enterField = new JTextField();
      enterField.setEnabled( false );

      enterField.addActionListener(

         new ActionListener() {

            public void actionPerformed( ActionEvent event )
            {
               sendData( event.getActionCommand() );
              
            }

         } 

      ); 

      container.add( enterField, BorderLayout.SOUTH );
      
      setSize( 400, 300 );
      setVisible( true );
   }

   // 运行服务端 
   public void runServer()
   {
      
      try {

         // 建立一个ServerSocket对象提供TCP/IP服务
         server = new ServerSocket( 5000);

         while ( true ) {

            // 等待连接
            waitForConnection();

            // 获得输入输出流
            getStreams();
 
            // 连接过程
            processConnection();

            // 关闭连接
            closeConnection();

            ++counter;
         }
      }

      // 当客户端关闭连接时给出提示
      catch ( EOFException eofException ) {
         System.out.println( "客户端关闭了连接" );
      }

      // 捕获I/O异常
      catch ( IOException ioException ) {
         ioException.printStackTrace();
      }
   }

   // wait for connection to arrive, then display connection info
   private void waitForConnection() throws IOException
   {
      displayArea.setText( "等待连接....\n" );

      // 接到连接请求,建立一条TCP连接,然后创建一个Socket的对象connection与客户端通信
      connection = server.accept();
            
      displayArea.append( "收到" + counter +
         " 请求连接从:" +
         connection.getInetAddress().getHostName() );
   }

   // 获取输入输出流,准备接受信息
   private void getStreams() throws IOException
   {
      
      output = new ObjectOutputStream(
         connection.getOutputStream() );
      output.flush();

      input = new ObjectInputStream(
         connection.getInputStream() );

      displayArea.append( "\n获得输入输出流\n" );
   }

   // 与客户端的连接过程
   private void processConnection() throws IOException
   {
      // 发送一个连接成功的信息给客户端
      String message = "服务器返回消息: 连接服务器成功!";
      output.writeObject( message );
      output.flush();

      // 使发送消息区域能编辑
      enterField.setEnabled( true );

      // 接受从客户端发送的信息
      do {

         // 读取信息并在 displayArea上显示消息
         try {
            message = ( String ) input.readObject();
            
            displayArea.append( "\n" + message );
            displayArea.setCaretPosition(
               displayArea.getText().length() );
         }

         // 捕获客户端的异常
         catch ( ClassNotFoundException classNotFoundException ) {
            displayArea.append( "\nUnknown object type received" );
         }

      } while ( !message.equals( "客户端:离线" ) );
   }

   //关闭输入输出流和TCP连接
   private void closeConnection() throws IOException
   {
      displayArea.append( "\n客户端离线了!" );
      enterField.setEnabled( false );
      output.close();
      input.close();
      connection.close();
   }

   // 发送消息到客户端
   private void sendData( String message )
   {
      
      try {
         output.writeObject( "服务端说:" + message );
         output.flush();
         displayArea.append( "\n服务端说:" + message );
      }

      catch ( IOException ioException ) {
         displayArea.append( "\nError writing object" );
      }
   }

   // 服务端主函数
   public static void main( String args[] )
   {
      Server application = new Server();

      application.setDefaultCloseOperation(
         JFrame.EXIT_ON_CLOSE );

      application.runServer();
   }

}  

⌨️ 快捷键说明

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