客户端程序:
package tcpclient;import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import com.borland.jbcl.layout.*;
import java.net.*;
import java.io.*;/**
 * <p>Title: </p>
 * <p>Description: </p>
 * <p>Copyright: Copyright (c) 2004</p>
 * <p>Company: </p>
 * @author not attributable
 * @version 1.0
 */public class Frame1 extends JFrame implements Runnable{
  JPanel contentPane;
  TextArea textArea1 = new TextArea();
  XYLayout xYLayout1 = new XYLayout();
  Label label1 = new Label();
  TextField textField1 = new TextField();
  Button button1 = new Button();
  Button button2 = new Button();
  Button button3 = new Button();
  //添加代码
  Socket socket = null;
  BufferedReader in = null;
  PrintWriter out = null;  //Construct the frame
  public Frame1() {
    enableEvents(AWTEvent.WINDOW_EVENT_MASK);
    try {
      jbInit();
    }
    catch(Exception e) {
      e.printStackTrace();
    }
  }
  //Component initialization
  private void jbInit() throws Exception  {
    contentPane = (JPanel) this.getContentPane();
    contentPane.setLayout(xYLayout1);
    this.setSize(new Dimension(400, 355));
    this.setTitle("客户端");
    label1.setText("消息:");
    button1.setLabel("开始发送");
    button1.addActionListener(new Frame1_button1_actionAdapter(this));
    button2.setLabel("连接");
    button2.addActionListener(new Frame1_button2_actionAdapter(this));
    button3.setLabel("退出");
    button3.addActionListener(new Frame1_button3_actionAdapter(this));
    textField1.setText("");
    textField1.addKeyListener(new Frame1_textField1_keyAdapter(this));
    contentPane.add(textArea1, new XYConstraints(8, 8, 379, 209));
    contentPane.add(label1, new XYConstraints(41, 235, -1, -1));
    contentPane.add(textField1, new XYConstraints(77, 233, 236, -1));
    contentPane.add(button1, new XYConstraints(317, 233, -1, -1));
    contentPane.add(button2, new XYConstraints(94, 267, -1, -1));
    contentPane.add(button3, new XYConstraints(227, 266, -1, -1));
  }
  //Overridden so we can exit when window is closed
  protected void processWindowEvent(WindowEvent e) {
    super.processWindowEvent(e);
    if (e.getID() == WindowEvent.WINDOW_CLOSING) {
      try{
        out.print("客户端已经退出");
        out.flush();
      }catch(Exception ex){}
      finally{
        System.exit(0);
      }
    }
  }  void button1_actionPerformed(ActionEvent e) {
    out.print(textField1.getText());
    out.flush();
    textArea1.append("客户端信息: "+ textField1.getText()+"\n");
    textField1.setText("");
  }  void button3_actionPerformed(ActionEvent e) {
    try{
      out.print("客户端退出");
      out.flush();
    }
    catch(Exception e2){}
    finally{
      System.exit(0);
    }
  }  void button2_actionPerformed(ActionEvent e) {
    Thread thread = new Thread(this);
    thread.start();
  }  void textField1_keyPressed(KeyEvent e) {
    int j = e.getKeyCode();
    if(j == e.VK_ENTER){
      out.print(textField1.getText());
      out.flush();
      textArea1.append("客户端信息: " + textField1.getText()+"\n");
      textField1.setText("");
    }
  }
  //添加代码
  public void run(){
    try{
      socket = new Socket("mg321",5438);
      in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
      out = new PrintWriter(socket.getOutputStream());
      button1.setEnabled(true);
      receiver r = new receiver();
      Thread t = new Thread(r);
      t.start();
      textArea1.append("系统信息: 已经连接上服务端! \n");
      button2.setEnabled(false);
    }
    catch(Exception e){
      textArea1.append(e.toString() + "\n");
    }
  }
  //内部类
  private class receiver implements Runnable{
    public void run(){
      String s1 = null;
      try{
        s1 = in.readLine();
        while(s1 != "client exit!"){
          textArea1.append("服务器端信息: " + s1 + "\n");
          s1 = in.readLine();
        }
        in.close();
        out.close();
        socket.close();
      }
      catch(Exception e){}
      button1.setEnabled(false);
    }
  }
}class Frame1_button1_actionAdapter implements java.awt.event.ActionListener {
  Frame1 adaptee;  Frame1_button1_actionAdapter(Frame1 adaptee) {
    this.adaptee = adaptee;
  }
  public void actionPerformed(ActionEvent e) {
    adaptee.button1_actionPerformed(e);
  }
}class Frame1_button3_actionAdapter implements java.awt.event.ActionListener {
  Frame1 adaptee;  Frame1_button3_actionAdapter(Frame1 adaptee) {
    this.adaptee = adaptee;
  }
  public void actionPerformed(ActionEvent e) {
    adaptee.button3_actionPerformed(e);
  }
}class Frame1_button2_actionAdapter implements java.awt.event.ActionListener {
  Frame1 adaptee;  Frame1_button2_actionAdapter(Frame1 adaptee) {
    this.adaptee = adaptee;
  }
  public void actionPerformed(ActionEvent e) {
    adaptee.button2_actionPerformed(e);
  }
}class Frame1_textField1_keyAdapter extends java.awt.event.KeyAdapter {
  Frame1 adaptee;  Frame1_textField1_keyAdapter(Frame1 adaptee) {
    this.adaptee = adaptee;
  }
  public void keyPressed(KeyEvent e) {
    adaptee.textField1_keyPressed(e);
  }
}