服务器端:
package HomeWork;
import javax.swing.*;
import javax.swing.border.Border;
import javax.swing.border.LineBorder;
import javax.swing.border.TitledBorder;import java.awt.*;
import java.awt.event.*;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Date;public class singlechat extends JFrame {
    JTextArea textarea,textarea1;
    //JTextField textfield;
    JButton button,button1,button2,button3,button4,button5;
    JPanel panel1 = new JPanel();
    JPanel panel2 = new JPanel();
    JPanel panel3 = new JPanel();
    JPanel panel4 = new JPanel();
    JScrollPane scrollpane;
    public DataInputStream din;
public DataOutputStream dout;  
    public Socket socket ;    public static void main(String[] args)  {
        new singlechat();
    }    public singlechat() {
        super("聊天室");
        addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
             try{
             din.close();
             dout.close();
             socket.close();
             System.exit(0);
         }
         catch (IOException ex){
         System.out.println("client closing: "+ ex.toString());
         }
            }
        });
        //this.setLayout();
        Font largeFont = new Font("TimesRoman", Font.BOLD, 20);
        Border lineBorder = new LineBorder(Color.BLACK, 2);
        button = new JButton("发送");
        button1 = new JButton("老大");
        button2 = new JButton("老二");
        button3 = new JButton("老三");   
        button4 = new JButton("老四");
        button5 = new JButton("老五");
        textarea = new JTextArea(6, 30);
        textarea1 = new JTextArea(3,30);
        textarea.setForeground(Color.blue);
        textarea.setFont(largeFont);
        textarea.setBorder(lineBorder);
        textarea1.setForeground(Color.red);
        textarea1.setFont(largeFont);
        textarea1.setBorder(lineBorder);
        textarea1.setBackground(Color.cyan );
        scrollpane = new JScrollPane(textarea);
        //scrollpane.setPreferredSize(new Dimension(200, 200));
        //textfield = new JTextField(20);//textfield要先new出来
        //textfield.setForeground(Color.red);
        
       // setContentPane(panel1);
        panel1.setPreferredSize(new Dimension(400, 300));
        //panel1.setBackground(Color.white);
       // panel1.setForeground(Color.blue);
        panel1.setVisible(true);
        panel1.setBorder(new TitledBorder("显示区域"));
        panel1.setLayout(new BorderLayout());// 设置边界布局
        panel1.add(scrollpane, BorderLayout.CENTER);
        //this.add(panel1);
       // setContentPane(panel2);
     
        //panel2.setBackground(Color.white);
        //panel2.setForeground(Color.blue);
        panel2.setVisible(true);
        panel2.setPreferredSize(new Dimension(400, 100));
        panel2.setBorder(new TitledBorder("输入区域"));
        panel2.setLayout(new GridLayout(2,1,10,10));// 设置边界布局
        panel2.add(textarea1);
        panel2.add(button);
       
      //this.add(panel2,BorderLayout.SOUTH);
        // setContentPane(panel3);
         //panel3.setBackground(Color.red);
         //panel3.setForeground(Color.blue);
       
        panel3.setVisible(true);
        panel3.setLayout(new BorderLayout());
        panel3.setPreferredSize(new Dimension(400, 600));
        panel3.setBorder(new TitledBorder("聊天区域"));
        panel3.add(panel1,BorderLayout.CENTER);
        panel3.add(panel2,BorderLayout.SOUTH);
        
        
        
        panel4.setVisible(true);
        panel4.setPreferredSize(new Dimension(200, 600));
        panel4.setBorder(new TitledBorder("群成员"));
        panel4.setLayout(new GridLayout(20,1,10,0));
        panel4.add(button1);
        panel4.add(button2);
        panel4.add(button3);
        panel4.add(button4);
        panel4.add(button5);
            
           
        this.setTitle("聊天室");     
        this.setVisible(true);
        this.setResizable(false);   
        this.setBounds(100,100,600,600);//这个函数 设置 窗口大小 及 显示位置的
        this.add(panel3,BorderLayout.WEST);
        this.add(panel4,BorderLayout.EAST);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       // button.addActionListener(new ButtonListener());
       
        
        try {
         ServerSocket serverSocket = new ServerSocket(8000);
textarea.append("Server started at " + new Date() + 
"\n server port is "+serverSocket.getInetAddress().getHostAddress()+
":"+serverSocket.getLocalPort() + "\n"); // Listen for a connection request
Socket socket = serverSocket.accept();
System.out.println("a client connected!");
DataInputStream din = new DataInputStream( socket.getInputStream());
DataOutputStream dout = new DataOutputStream( socket.getOutputStream());
while (true) {
button.addActionListener(new ListenerClass());
String ss;
ss  = din.readUTF();
textarea.append("\n" +  ss + "\n"  );
}
        }
catch(IOException ex) {
System.err.println("server:"+ex);
}  
      } 
   
    private class ListenerClass implements ActionListener {
     public void actionPerformed(ActionEvent e) { 
     try{
       String s;
         s = textarea1.getText().toString();        
         textarea.append("\n" + s  + "\n");
                dout.writeChars(s); 
         }
         catch (Exception ex) {
                System.err.println("textarea exception: "+ex);
              }
     
     }
  }
}