//服务端程序如下
import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

 

import javax.swing.*;

 

public class SocketThreadServer {
       public static void main(String[] args){
              ServerThreadListen MyServer = new ServerThreadListen(5000,10);
       }
}
class ServerThreadListen extends JFrame{
       ServerSocket lst;
       Socket connection;
       JTextArea display;
       int counter = 1;
       public ServerThreadListen(int port,int join){
              super("Server Listening window");
              Container c = getContentPane();
              display = new JTextArea("Listening service window");
              c.add(new JScrollPane(display),BorderLayout.CENTER);
              setSize(300,180);
              show();
              try{
                     lst = new ServerSocket(port,join);
                     display.setText("Waiting for connection");
                     while(true){
                            connection = lst.accept();
                            display.append("\nConnection " + counter + "received from" +
                                          connection.getInetAddress().getHostName());
                            ServerThread thread  = new ServerThread(this,connection,counter);
                            thread.connectThread.start();
                                   ++counter;
                     }
              }
              catch(EOFException eof){
                     System.out.println("Client terminated connection");
              }
              catch(IOException e){
                     e.printStackTrace();
              }
       }
}
class ServerThread extends JFrame implements Runnable{
       ServerThreadListen serverListten;
       Socket connectClient;
       Thread connectThread;
       JLabel label;
       JTextField enter;
       JTextArea display;
       String[] str = {"知道了!"+"什么事?"+"你在哪儿?"+"我等你"+"生日快乐"+"祝你万事如意!"+"希望你学习进步!"};
       JComboBox combo;
       ObjectOutputStream output;
       ObjectInputStream input;
       int count;
       public ServerThread(ServerThreadListen ls,Socket socket,int s){
              super("Server Thread");
              ServerThreadListen serverListen = ls;
              connectClient=socket;
              connectThread=new Thread(this);
              count=s;
              Container c=getContentPane();
              JPanel panel=new JPanel();
              label = new JLabel("交谈(结束输入‘END’)");
              enter = new JTextField(18);
              enter.setEnabled(false);
              enter.addActionListener(new ActionListener(){
                     public void actionPerformed(ActionEvent e){
                            sendDate(e.getActionCommand());
                            enter.setText("");
                     }
              });
              panel.add(label, BorderLayout.EAST);
              panel.add(enter,BorderLayout.WEST);
              c.add(panel,BorderLayout.NORTH);
              display=new JTextArea();
              c.add(new JScrollPane(display),BorderLayout.CENTER);
              combo=new JComboBox(str);
              combo.setToolTipText("常用语");
              combo.setMaximumRowCount(3);
              combo.addItemListener(
                     new ItemListener(){
                            public void itemStateChanged(ItemEvent e){
                                   enter.setText(str[combo.getSelectedIndex()]);
                                   combo.setFocusable(false);
                            }
                     });
              c.add(combo,BorderLayout.SOUTH);
              setSize(350,230);
              show();
              display.append("\nConnection received from: " +
                            connectClient.getInetAddress().getHostName());
       }
       public void run(){
              System.out.println("Thread start");
              try{
                     output= new ObjectOutputStream(connectClient.getOutputStream());
                     input=new ObjectInputStream(connectClient.getInputStream());
                     String message="Connection successful";
                     output.writeObject(message);
                     output.flush();
                     enter.setEnabled(true);
                     do{
                            try{
                                   message=(String) input.readObject();
                                   display.append("\n"+message);
                                   display.setCaretPosition(display.getText().length());
                            }
                            catch(ClassNotFoundException e){
                                   display.append("\nUnknow object type received");
                            }
                     }while(!message.equals("END"));
                     display.append("\nUser terminated connection");
                     enter.setEnabled(false);
                     output.close();
                     input.close();
                     connectClient.close();
                     dispose();
              }
              catch(EOFException eof){
                     System.out.println("Client terminated connection");
              }
              catch(IOException e){
                     e.printStackTrace();
              }
       }
       private void sendDate(String s){
              try{
                     output.writeObject(s);
                     output.flush();
              }
              catch(IOException e){
                     display.append("\nError writing object");
              }
       }
}

 



//客户端程序如下
import java.io.*;
import java.net.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Client extends JFrame{
       JLabel label;
       JTextField enter;
       JTextArea display;
       String[] str ={"知道了!","什么事?","你在哪儿?","我等你","生日快乐","祝你万事如意!","希望你学习进步!"};
       JComboBox combo;
       ObjectOutputStream output;
       ObjectInputStream input;
       String message="";
       public Client(){
              super("Client");
              Container c=getContentPane();
              JPanel panel=new JPanel();
              label=new JLabel("交谈(结束输入‘END’)");
              enter=new JTextField(18);
              enter.setEnabled(false);
              enter.addActionListener(
                     new ActionListener(){
                            public void actionPerformed(ActionEvent e){
                                   sendDate(e.getActionCommand());
                                   enter.setText("");
                            }
                     });
              panel.add(label,BorderLayout.EAST);
              panel.add(enter,BorderLayout.WEST);
              c.add(panel,BorderLayout.NORTH);
              display=new JTextArea();
              c.add(new JScrollPane(display),BorderLayout.CENTER);
              combo=new JComboBox(str);
              combo.setToolTipText("常用语");
              combo.setMaximumRowCount(3);
              combo.addItemListener(
                     new ItemListener(){
                            public void itemStateChanged(ItemEvent e){
                                   enter.setText(str[combo.getSelectedIndex()]);
                                   combo.setFocusable(false);
                            }
                     });
              c.add(combo,BorderLayout.SOUTH);
              setSize(350,230);
              show();
       }
       public void runClient(){
              Socket client;
              try{
                     display.setText("Attempting connection\n");
                     client = new Socket(InetAddress.getByName("127.0.0.1"),5000);
                     display.append("Connected to: "+client.getInetAddress().getHostName());
                     output=new ObjectOutputStream(client.getOutputStream());
                     input=new ObjectInputStream(client.getInputStream());
                     enter.setEnabled(true);
                     do{
                            try{
                                   message=(String) input.readObject();
                                   display.append("\n"+message);
                                   display.setCaretPosition(display.getText().length());
                            }
                            catch(ClassNotFoundException cnfex){
                                   display.append("\nUnknow object type received");
                            }
                     }while(!(message.equals("END")));
                     display.append("Closing connection.\n");
                     output.close();
                     input.close();
                     client.close();
              }
              catch(EOFException eof){
                     System.out.println("Server terminated connection");
              }
              catch(IOException e){
                     e.printStackTrace();
              }
             
       }
       private void sendDate(String s){
              try{
                     message=s;
                     output.writeObject(s);
                     output.flush();
              }
              catch(IOException e){
                     display.append("\nError writint object");
              }
       }
       public static void main(String[] args){
              Client app=new Client();
              app.addWindowListener(new WindowAdapter(){
                     public void windowClosing(WindowEvent e)
                     {System.exit(0);}
              });
              app.runClient();
       }
}