📄 chatroomserverframe.java
字号:
package ChatRoom;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.net.ServerSocket;import java.net.Socket;import java.util.HashSet;import java.util.Set;import javax.swing.*;import javax.swing.JOptionPane;public class ChatRoomServerFrame extends javax.swing.JFrame implements ActionListener{ /** Creates new form ChatRoomServer */ public ChatRoomServerFrame() { initComponents(); } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code. The content of this method is * always regenerated by the Form Editor. */ // <editor-fold defaultstate="collapsed" desc=" 生成的代码 "> private void initComponents() { jLabel1 = new javax.swing.JLabel(); jPanel1 = new javax.swing.JPanel(); jPanel2 = new javax.swing.JPanel(); jLabel2 = new javax.swing.JLabel(); jtf = new javax.swing.JTextField(); start = new javax.swing.JButton(); quit = new javax.swing.JButton(); jScrollPane1 = new javax.swing.JScrollPane(); jta = new javax.swing.JTextArea(); setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE); setTitle("\u7fa4\u804a\u5668 CASD080512_Z.O.E"); setBackground(new java.awt.Color(255, 153, 153)); jLabel1.setFont(new java.awt.Font("文鼎PL细上海宋Uni", 1, 24)); jLabel1.setHorizontalAlignment(javax.swing.SwingConstants.CENTER); jLabel1.setText("\u7fa4\u804a\u670d\u52a1\u5668V1.0"); jLabel1.setBorder(javax.swing.BorderFactory.createBevelBorder(javax.swing.border.BevelBorder.RAISED)); jPanel1.setBorder(javax.swing.BorderFactory.createEtchedBorder()); jPanel2.setBorder(javax.swing.BorderFactory.createEtchedBorder()); jLabel2.setFont(new java.awt.Font("Dialog", 1, 18)); jLabel2.setText("\u7aef\u53e3\u53f7: "); jtf.setFont(new java.awt.Font("Dialog", 1, 14)); start.setFont(new java.awt.Font("Dialog", 1, 14)); start.setText("\u542f\u52a8"); quit.setFont(new java.awt.Font("Dialog", 1, 14)); quit.setText("\u9000\u51fa"); javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2); jPanel2.setLayout(jPanel2Layout); jPanel2Layout.setHorizontalGroup( jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel2Layout.createSequentialGroup() .addContainerGap() .addComponent(jLabel2) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jtf, javax.swing.GroupLayout.PREFERRED_SIZE, 106, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED, 63, Short.MAX_VALUE) .addComponent(start) .addGap(52, 52, 52) .addComponent(quit) .addContainerGap()) ); jPanel2Layout.linkSize(javax.swing.SwingConstants.HORIZONTAL, new java.awt.Component[] {quit, start}); jPanel2Layout.setVerticalGroup( jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel2Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE) .addComponent(jLabel2, javax.swing.GroupLayout.PREFERRED_SIZE, 38, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(jtf, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addComponent(quit) .addComponent(start, javax.swing.GroupLayout.PREFERRED_SIZE, 37, javax.swing.GroupLayout.PREFERRED_SIZE)) .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) ); jPanel2Layout.linkSize(javax.swing.SwingConstants.VERTICAL, new java.awt.Component[] {quit, start}); jta.setColumns(20); jta.setRows(5); jScrollPane1.setViewportView(jta); javax.swing.GroupLayout jPanel1Layout = new javax.swing.GroupLayout(jPanel1); jPanel1.setLayout(jPanel1Layout); jPanel1Layout.setHorizontalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addContainerGap() .addGroup(jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false) .addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.LEADING) .addComponent(jPanel2, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)) .addContainerGap(16, Short.MAX_VALUE)) ); jPanel1Layout.setVerticalGroup( jPanel1Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(jPanel1Layout.createSequentialGroup() .addContainerGap() .addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jScrollPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 343, Short.MAX_VALUE) .addContainerGap()) ); javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane()); getContentPane().setLayout(layout); layout.setHorizontalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup() .addContainerGap() .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING) .addComponent(jPanel1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addComponent(jLabel1, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.DEFAULT_SIZE, 488, Short.MAX_VALUE)) .addContainerGap()) ); layout.setVerticalGroup( layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING) .addGroup(layout.createSequentialGroup() .addContainerGap() .addComponent(jLabel1, javax.swing.GroupLayout.PREFERRED_SIZE, 56, javax.swing.GroupLayout.PREFERRED_SIZE) .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED) .addComponent(jPanel1, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE) .addContainerGap()) ); pack(); }// </editor-fold> private void action(){ start.addActionListener(this); quit.addActionListener(this); } public void actionPerformed(ActionEvent e) { if(e.getSource()==start){ if(jtf.getText().equals("")) JOptionPane.showMessageDialog(this, "请输入端口号!"); else{ new StartThread().start(); start.setEnabled(false); } }else if(e.getSource()==quit){ System.exit(0); } } class StartThread extends Thread{ @Override public void run() { new ChatRoomServer().startServe(Integer.parseInt(jtf.getText())); } } public void showme(){ jta.setEditable(false); action(); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setLocation(300, 300); this.setResizable(false); this.setVisible(true); } public static void main(String[] args) { new ChatRoomServerFrame().showme(); } /** * @param args the command line arguments */ // 变量声明 - 不进行修改 private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel2; private javax.swing.JPanel jPanel1; private javax.swing.JPanel jPanel2; private javax.swing.JScrollPane jScrollPane1; private javax.swing.JTextArea jta; private javax.swing.JTextField jtf; private javax.swing.JButton quit; private javax.swing.JButton start; // 变量声明结束 public class ChatRoomServer { private ServerSocket ss; private Set<Socket> allSockets; private void startServe(int port){ try { ss=new ServerSocket(port); allSockets=new HashSet<Socket>(); jta.append("服务器已启动!"); init(); } catch (IOException e) { e.printStackTrace(); } } public void init()throws IOException{ while(true){ Socket s=ss.accept(); allSockets.add(s); new ServerThread(s).start(); } } class ServerThread extends Thread{ private Socket s; public ServerThread(Socket s){ this.s=s; } public void run(){ String str=null; ObjectInputStream ois=null; ObjectOutputStream oos=null; try { oos=new ObjectOutputStream(s.getOutputStream()); oos.writeObject("系统 : 你好!~"); while(true){ ois=new ObjectInputStream(s.getInputStream()); str=(String)ois.readObject(); jta.append(str+"\n"); jta.moveCaretPosition(jta.getText().length()); if(str.indexOf("quit")!=-1){ Thread.sleep(100); s.close(); allSockets.remove(s); break; } for(Socket all:allSockets){ oos=new ObjectOutputStream(all.getOutputStream()); oos.writeObject(str); oos.flush(); } } } catch (Exception e) { e.printStackTrace(); } } } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -