目前我尝试实施服务器/客户端 - 应用程序并提出了一个问题,我无法找到解决方案。
我正在运行Server
,等待Clients
登录,将其添加到cachedThreadPool
并为每个Runnable
开始新的Client
,处理他们的个人请求等。
现在这些请求有一些答案,必须在服务器处理后进行广播。
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();
}
}
}
现在我遇到的问题是,当我处理请求时:
handleIncomingObject();
需要广播。
我的方法是在创建runnable时提供对ExecutorService
Object的引用,以便在不同的线程中访问线程池。
正如您所看到的,每个客户都有自己的
LinkedList<Object> mInputList
LinkedList<Object> mOutputList
缓冲传入和传出的消息。
在handleIncomingObject()
中,我想做类似的事情:
//assume exec as ExecutorService
for(Thread t : exec)
{
mOutputList.add(new Message(message));
}
提前感谢任何帮助或建议。
问候,本。
答案 0 :(得分:1)
使用包含所有客户端的Vector并迭代此Vector以发送广播消息。您可以使用以下方法:
public static synchronized void broadcast(Message msg) {
for(Client c : vector) {
c.mOutputList.add(msg);
}
}