//这是一个java的server, client连接此server后发送一条语句:"LOGIN name", server收到此语句后回一句"WElCOME ..."
//当用户"a"发送一句"DRAW x1 y1 x2 y2 color"语句后, server向所有连接上词server socket的用户群发
//"DRAWMSG a x1 y1 x2 y2 color". 现在已经可以实现多用户连接上服务器并单独交换信息. 请问怎么实现server向多用户群发消息.
//谢谢
import java.io.*;
import java.net.*;
import java.util.*;/**
 * <p>Title: Network Programming - Client</p>
 *
 * <p>Description: WhiteBoard client program that copes with Logic server</p>
 *
 * <p>Copyright: Copyright (c) os2008sp2</p>
 *
 * <p>Company: Unisa Corp</p>
 *
 * @author SHI, Bishuo
 *
 * @version 1.0
 */public class NetworkEchoServer {
    public static void main(String[] args) 
    {
        int i=0;
        
        try
        {
            ServerSocket listener = new ServerSocket(Integer.parseInt(args[0]));
            Socket server;
            PrintWriter op;
            Vector clients = new Vector();
            while(true)
            {
                
                server = listener.accept();
                op=new PrintWriter(server.getOutputStream());
                op.println("WELCOME Thank you for using whiteboard system");
                op.flush();
                Client client= new Client(server);
                clients.addElement(client);
                Thread t = new Thread(client);
                t.start();
            }
        } catch (IOException ioe) {
            System.out.println("IOException on socket listen: " + ioe);
            ioe.printStackTrace();
        }
    }
    
}class Client implements Runnable {
    private Socket socket;
    private String line;
    String name;
    Client(Socket socket) {
        this.socket=socket;
    }
    
    public void run () {
        
        try {
                // Get input from the client
                BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                PrintStream out = new PrintStream(socket.getOutputStream());
                
                while((line = in.readLine()) != null && !line.equals(".")) {
                    if(line.startsWith("LOGIN"))
                    {
                        StringTokenizer token = new StringTokenizer(line," ");
                        token.nextToken();
                        name=token.nextToken();
                        out.println("LOGIN_OK"+name);
                        out.flush();
                    }
                    if(line.startsWith("DRAW"))
                    {
                        StringTokenizer token = new StringTokenizer(line," ");
                        token.nextToken();
                        line="DRAWMSG "+name+" "+token.nextToken()+" "+token.nextToken()+" "+
                             token.nextToken()+" "+token.nextToken()+" "+token.nextToken();
                        out.println(line);
                        out.flush();
                    }
                    //out.println("From server: " + line);
                }
                
                
                socket.close();
            } catch (IOException ioe) {
                System.out.println("IOException on socket listen: " + ioe);
                ioe.printStackTrace();
      }
  }
}

解决方案 »

  1.   

    那你就应该声明一个集合,保存这些连接了呀.每次有一个连接进来,判断一下这个集合中有没有这个连接,如果没有就把这个连接放到这个集合中去啊.发消息的时候,就是遍历这个集合中的每个连接对像(判断一下是否有效),然后一个一个的发同一个消息嘛