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

📄 mainframe.java

📁 采用Java语言进行网络编程实现
💻 JAVA
字号:
package multiserver;

import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.net.*;   //引入网络包,以实现套接字连接
import java.io.*;   //引入输入输出流包,以进行数据的读写

/**
 * <p>Title: </p>
 * <p>Description: </p>
 * <p>Copyright: Copyright (c) 2005</p>
 * <p>Company: </p>
 * @author not attributable
 * @version 1.0
 */

public class MainFrame extends JFrame {
  JPanel contentPane;
  JLabel jLabel1 = new JLabel();
  JTextField jTextField1 = new JTextField();
  JButton jButton1 = new JButton();
  JScrollPane jScrollPane1 = new JScrollPane();
  JTextArea jTextArea1 = new JTextArea();
  ServerSocket server=null;   //server成员变量的作用是用来打开服务器的端口
  ConnectSocket csocket=null;
  Socket socket=null;
  //Construct the frame
  public MainFrame() {
    enableEvents(AWTEvent.WINDOW_EVENT_MASK);
    try {
      jbInit();
    }
    catch(Exception e) {
      e.printStackTrace();
    }
  }
  //Component initialization
  private void jbInit() throws Exception  {
    contentPane = (JPanel) this.getContentPane();
    jLabel1.setFont(new java.awt.Font("Dialog", 0, 16));
    jLabel1.setText("监听端口");
    jLabel1.setBounds(new Rectangle(25, 21, 75, 28));
    contentPane.setLayout(null);
    this.setSize(new Dimension(388, 328));
    this.setTitle("多客户信息交互系统-服务器端");
    jTextField1.setFont(new java.awt.Font("Dialog", 0, 16));
    jTextField1.setText("6544");
    jTextField1.setBounds(new Rectangle(102, 21, 133, 28));
    jButton1.setBounds(new Rectangle(251, 21, 111, 28));
    jButton1.setFont(new java.awt.Font("Dialog", 0, 16));
    jButton1.setText("开始监听");
    jButton1.addActionListener(new MainFrame_jButton1_actionAdapter(this));
    jScrollPane1.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_ALWAYS);
    jScrollPane1.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
    jScrollPane1.setBounds(new Rectangle(20, 58, 343, 222));
    jTextArea1.setText("");
    contentPane.add(jLabel1, null);
    contentPane.add(jTextField1, null);
    contentPane.add(jButton1, null);
    contentPane.add(jScrollPane1, null);
    jScrollPane1.getViewport().add(jTextArea1, null);
  }
  //Overridden so we can exit when window is closed
  protected void processWindowEvent(WindowEvent e) {
    super.processWindowEvent(e);
    if (e.getID() == WindowEvent.WINDOW_CLOSING) {
      System.exit(0);
    }
  }

  void jButton1_actionPerformed(ActionEvent e) {
    try {
           /*打开服务器端口*/
           server = new ServerSocket(Integer.parseInt(jTextField1.getText()));
           /*添加提示信息*/
           jTextArea1.append("系统提示:聊天服务器系统开始启动...... \n");
    } catch (IOException e1) {   //捕捉打开端口时可能产生的异常
           jTextArea1.append("服务器端口打开出错\n");
    }
    if (server != null){   //如果端口打开成功
      csocket = new ConnectSocket();
      csocket.start();
    }
}
  class ReadMessageThread extends Thread{
    BufferedReader cin;  //输入流成员变量
    PrintStream cout;    //输出流成员变量
    Socket socket;      //套接字成员变量
     /*构造器方法,实现从用户连接线程中获得套接字,
     并利用该套接字实现输入流和输出流的建立*/
    ReadMessageThread(Socket socket){
           this.socket=socket;
            try{
               cin=new BufferedReader(new InputStreamReader(this.socket.getInputStream()));
               cout = new PrintStream(this.socket.getOutputStream());
             }catch(IOException e){
                jTextArea1.append("输入输出流建立异常\n");
             }
     }
     public void run(){
          String str="";
          while(true){
          try{
                 str = cin.readLine();
                 cout.println("服务器已接收到你发来的信息:"+str);
          }catch (IOException e){
                 jTextArea1.append("输入输出异常\n");
          }
          if (str.equals("QUIT")){
               try{
                   socket.close();
                   jTextArea1.append("客户连接关闭\n");
               }catch (IOException e){
                   jTextArea1.append("套接字关闭异常\n");
               }
               break;
            } else
               jTextArea1.append("从客户端读入如下的信息:"+str+"\n");
            }
         }
      }
       class ConnectSocket extends Thread{
          public void run(){   //将多用户连接过程在run方法中实现
                while(true){   //多个客户连接循环
                    try{
                         socket = server.accept();   //等待客户连接
                     }catch (IOException e){
                          jTextArea1.append("用户连接服务器出错\n");
                    }
                    if (socket!=null){
                          //创建收发信息线程对象
                          ReadMessageThread readThread=new ReadMessageThread(socket);
                         //激活线程
                         readThread.start();
                      }
                 }
             }
          }

}

class MainFrame_jButton1_actionAdapter implements java.awt.event.ActionListener {
  MainFrame adaptee;

  MainFrame_jButton1_actionAdapter(MainFrame adaptee) {
    this.adaptee = adaptee;
  }
  public void actionPerformed(ActionEvent e) {
    adaptee.jButton1_actionPerformed(e);
  }
}

⌨️ 快捷键说明

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