Java 向多个客户端广播对象

Java 向多个客户端广播对象,java,broadcasting,Java,Broadcasting,目前我试图实现一个服务器/客户端应用程序,但遇到了一个问题,我找不到解决方案 我正在运行一个服务器,它正在等待客户端登录,将它们添加到缓存线程池,并为每个客户端启动一个新的可运行,以处理它们各自的请求等 现在有一些对这些请求的回答,这些回答必须在服务器进行处理后广播 this.mOos = new ObjectOutputStream(this.mSocket.getOutputStream()); this.mOos.flush(); this.

目前我试图实现一个服务器/客户端应用程序,但遇到了一个问题,我找不到解决方案

我正在运行一个
服务器
,它正在等待
客户端
登录,将它们添加到
缓存线程池
,并为每个
客户端
启动一个新的
可运行
,以处理它们各自的请求等

现在有一些对这些请求的回答,这些回答必须在服务器进行处理后广播

        this.mOos = new ObjectOutputStream(this.mSocket.getOutputStream());
        this.mOos.flush();
        this.mOis = new ObjectInputStream(this.mSocket.getInputStream());

        while(true)
        {
            Object o = this.mOis.readObject();

            if(o !=null && this.mInputList.size() < 20)
            {
                this.mInputList.add(o);
            }

            if(!this.mInputList.isEmpty())
            {
                handleIncomingObject();
            }

            if(!this.mOutputList.isEmpty())
            {                       
                try 
                {
                    this.mOos.writeObject(this.mOutputList.remove(0));
                    this.mOos.flush();
                    this.mOos.reset();
                } 
                catch (IOException e) 
                {
                    e.printStackTrace();
                }
            }               
        }
这需要广播

我的方法是在创建runnable时引用
ExecutorService
对象,以访问不同线程中的线程池

正如你所看到的,每个客户都有自己的客户

LinkedList<Object> mInputList
LinkedList<Object> mOutputList
提前感谢所有的帮助或建议


你好,Ben。

使用包含所有客户端的向量,并在该向量上迭代以发送广播消息。您可以使用以下方法:

public static synchronized void broadcast(Message msg) {
    for(Client c : vector) {
        c.mOutputList.add(msg);
    }
}

Tyvm支持这个建议,尽管当我看到这个方法有多么简单时,我对自己很生气;-)
//assume exec as ExecutorService
for(Thread t : exec)
{
        mOutputList.add(new Message(message));
}
public static synchronized void broadcast(Message msg) {
    for(Client c : vector) {
        c.mOutputList.add(msg);
    }
}