帮忙给修改这个代码
采用Socket通信实现的聊天室程序。
//① 聊天室的图形用户界面程序import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import java.io.*;public class ChatJFrame extends JFrame implements ActionListener
{
  private JTextArea text_receiver; //显示对话内容的文本区
  private JTextField text_sender; //输入发送内容的文本行
  private PrintWriter cout; //字符输出流对象
  private String name; //网名
    
  public ChatJFrame(String name, String title, PrintWriter cout) //构造方法
  {
  super("聊天室 "+name+" "+title);
  this.setSize(320,240);
  this.setLocation(300,240);
  this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    
  this.text_receiver = new JTextArea();
  this.text_receiver.setEditable(false); //不可编辑
  this.add(this.text_receiver);
    
  JPanel panel = new JPanel();
  this.add(panel,"South");
  this.text_sender = new JTextField(12);
  panel.add(this.text_sender);
  this.text_sender.addActionListener(this); //注册单击事件监听器  JButton button_send = new JButton("发送");
  panel.add(button_send);
  button_send.addActionListener(this);  JButton button_leave = new JButton("离线");
  panel.add(button_leave);
  button_leave.addActionListener(this);  this.setVisible(true);
  this.setWriter(cout);
  this.name = name;
  }
  
  public ChatJFrame()
  {
  this("","",null);
  }  public void setWriter(PrintWriter cout) //设置字符输出流对象
  {
  this.cout = cout;//② Socket通信中的服务端程序import java.net.*;
import java.io.*;public class ChatServerSocket
{
  private ChatJFrame chatframe; //聊天室的图形用户界面
  private ServerSocket server; //提供TCP连接服务的ServerSocket对象
  private Socket client; //与客户端通信的Socket对象
    
  public ChatServerSocket(int port, String name) //约定端口号、网名
  {
  try
  {
  server = new ServerSocket(port); //创建ServerSocket对象,提供TCP连接服务
  client = server.accept(); //等待接收一个客户端的连接申请
  //连接成功后返回一个已连接的Socket对象
  BufferedReader cin = new BufferedReader(new InputStreamReader(client.getInputStream()));
  //获得Socket对象的输入流,创建字符输入流
  PrintWriter cout = new PrintWriter(client.getOutputStream(), true);
  //获得Socket对象的输出流,创建字符输出流  chatframe = new ChatJFrame(name," 服务端 端口"+port,cout); //创建聊天室的图形用户界面
  chatframe.receive("连接 "+cin.readLine()); //接收并显示已连接的对方网名
  cout.println(name); //将自己网名发送给对方
    
  String aline = "";
  do //从输入流接收对方发来的字符串
  {
  aline = cin.readLine(); //读取一行字符串,输入流结束时返回null
  if (aline!=null && !aline.equals("bye")) //"bye"是约定离线信息
  chatframe.receive(aline);
  }while (aline!=null && !aline.equals("bye"));  chatframe.setWriter(null); //设置聊天室界面的输出流对象为空  cin.close();
  cout.close();  client.close(); //关闭Socket连接
  server.close(); //停止等候客户端的连接请求
  }
  catch(IOException e) {}
  }  public static void main(String args[])
  {
  new ChatServerSocket(2001,"花仙子"); //约定端口号,指定网名
  }
}
//③ Socket通信中的客户端程序import java.net.*;
import java.io.*;public class ChatSocket
{
  private ChatJFrame chatframe; //聊天室的图形用户界面
  private Socket client; //客户端Socket对象
    
  public ChatSocket(String host, int port, String name) //主机名、端口号、网名
  {
  try
  {
  client = new Socket(host,port); //创建一个Socket对象时向指定主机的端口发出TCP连接请求
  BufferedReader cin = new BufferedReader(new InputStreamReader(client.getInputStream()));
  //获得Socket对象的输入流,创建字符输入流
  PrintWriter cout = new PrintWriter(client.getOutputStream(),true);
  //获得Socket对象的输出流,创建字符输出流
  chatframe = new ChatJFrame(name," 客户端 主机"+host+" 端口"+port,cout);
  //创建聊天室的图形用户界面
  cout.println(name); //将自己网名发送给对方
  chatframe.receive("连接 "+cin.readLine()); //接收并显示已连接的对方网名
    
  String aline = "";
  do //从输入流接收对方发来的字符串
  {
  aline = cin.readLine();
  if (aline!=null && !aline.equals("bye")) //"bye"是约定的离线信息
  chatframe.receive(aline);
  }while (aline!=null && !aline.equals("bye"));  chatframe.setWriter(null); //设置聊天室界面的输出流对象为空
  cin.close();
  cout.close();
  client.close(); //关闭Socket连接
  }
  catch(IOException e) {}
  }  public static void main(String args[])
  {
  new ChatSocket("localhost",2001,"小蜜蜂"); //指定主机和端口号,指定网名
  }
}增加上线功能。离线后,将【离线】按钮变成【上线】,单击可再次申请建立连接。
增加若干图标作为表情,发送表情图标。谢谢了