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);
}
}