这是服务器端程序:
import java.awt.Color;
import java.awt.BorderLayout;
import java.awt.event.*;
import javax.swing.*;import java.util.*;import java.io.*;
import java.net.*;class ClientWorker implements Runnable {
  private Socket client;
  private JTextArea textArea;
  private Vector v;
  ClientWorker(Socket client, JTextArea textArea,Vector v) {
   this.client = client;
   this.textArea = textArea;
   this.v=v;
  }  public void run(){
    String line;
    BufferedReader in = null;
    PrintWriter out = null;
    Enumeration enu;
    try{
      in = new BufferedReader(new InputStreamReader(client.getInputStream()));
      out = new PrintWriter(client.getOutputStream(), true);
    } catch (IOException e) {
      System.out.println("in or out failed");
      System.exit(-1);
    }    while(true){
      try{
        line = in.readLine();
        if(line!=null&&!(line.equals("k15006\\bin\\javaw -classpath"))){
            textArea.append(line);
//Send data back to every client
            enu = v.elements();
            System.out.println(v.size());//这里打印vector的元素个数
            while (enu.hasMoreElements()) {
                client = (Socket) enu.nextElement();
                System.out.println("远程端口:"+client.getPort());
                out = new PrintWriter(client.getOutputStream(), true);
                out.println(line);//就是在这个循环里我想实现将信息从一个客户端发给所有客户端
                System.out.println(line);
            }
        }
//         out.println(line);       } catch (IOException e) {
         System.out.println("Read failed");
         System.exit(-1);
       }
    }
  }
}class SocketThrdServer extends JFrame{   JLabel label = new JLabel("Text received over socket:");
   JPanel panel;
   JTextArea textArea = new JTextArea();
   ServerSocket server = null;
   Vector v=new Vector();
   SocketThrdServer(){ //Begin Constructor
     panel = new JPanel();
     panel.setLayout(new BorderLayout());
     panel.setBackground(Color.white);
     getContentPane().add(panel);
     panel.add("North", label);
     panel.add("Center", textArea);
   } //End Constructor  public void listenSocket(){
      ClientWorker w;
      Socket ssocket;
    try{
      server = new ServerSocket(4444);
    } catch (IOException e) {
      System.out.println("Could not listen on port 4444");
      System.exit(-1);
    }
    while(true){
//      ClientWorker w;
//      Socket ssocket;
//      Vector v=new Vector();
      try{
          ssocket=server.accept();
          v.addElement(ssocket);
        w = new ClientWorker(ssocket,textArea,v);
        Thread t = new Thread(w);
        t.start();
      } catch (IOException e) {
        System.out.println("Accept failed: 4444");
        System.exit(-1);
      }
    }
  }  protected void finalize(){
//Objects created in run method are finalized when
//program terminates and thread exits
     try{
        server.close();
    } catch (IOException e) {
        System.out.println("Could not close socket");
        System.exit(-1);
    }
  }  public static void main(String[] args){
        SocketThrdServer frame = new SocketThrdServer();
frame.setTitle("Server Program");
        WindowListener l = new WindowAdapter() {
                public void windowClosing(WindowEvent e) {
                        System.exit(0);
                }
        };
        frame.addWindowListener(l);
        frame.pack();
        frame.setVisible(true);
        frame.listenSocket();
  }
}

解决方案 »

  1.   

    这是客户端程序:
    import java.awt.Color;
    import java.awt.BorderLayout;
    import java.awt.event.*;
    import javax.swing.*;import java.io.*;
    import java.net.*;class SocketClient extends JFrame
     implements ActionListener {   JLabel text, clicked;
       JButton button;
       JPanel panel;
       JTextField textField;
       Socket socket = null;
       PrintWriter out = null;
       BufferedReader in = null;   SocketClient(){ //Begin Constructor
         text = new JLabel("Text to send over socket:");
         textField = new JTextField(20);
         button = new JButton("Click Me");
         button.addActionListener(this);     panel = new JPanel();
         panel.setLayout(new BorderLayout());
         panel.setBackground(Color.white);
         getContentPane().add(panel);
         panel.add("North", text);
         panel.add("Center", textField);
         panel.add("South", button);
         addWindowListener(new WindowAdapter(){
             public void windowClosing(WindowEvent e) {
                 try{
                     if(socket!=null)
                         socket.close();
                 }catch(IOException ioe){
                     System.out.println(ioe.getMessage());
                 }
                 System.exit(0);
             }
         });
       } //End Constructor  public void actionPerformed(ActionEvent event){
         Object source = event.getSource();
         out.println("k15006\\bin\\javaw -classpath");
         if(source == button){
    //Send data over socket
              String text = textField.getText();
              out.println(text);
      textField.setText(new String(""));
    //Receive text from server
           try{
      String line = in.readLine();
              setTitle(line);
              System.out.println("Text received :" + line);
           } catch (IOException e){
     System.out.println("Read failed");
             System.exit(1);
           }
         }
      }  public void listenSocket(){
    //Create socket connection
         try{
           socket = new Socket("shanghai", 4444);
           out = new PrintWriter(socket.getOutputStream(), true);
           in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
         } catch (UnknownHostException e) {
           System.out.println("Unknown host: kq6py.eng");
           System.exit(1);
         } catch  (IOException e) {
           System.out.println("No I/O");
           System.exit(1);
         }
      }   public static void main(String[] args){
            SocketClient frame = new SocketClient();
    frame.setTitle("Client Program");
            WindowListener l = new WindowAdapter() {
                    public void windowClosing(WindowEvent e) {
                            System.exit(0);
                    }
            };        frame.addWindowListener(l);
            frame.pack();
            frame.setVisible(true);
    frame.listenSocket();
      }
    }