broadcastthread.java

来自「用Java编写的基于Socket的聊天室小程序!」· Java 代码 · 共 50 行

JAVA
50
字号
class BroadcastThread extends Thread{//广播线程
 ChatRoomServer chatFrame2;
 java.util.Vector chatClients;//连接线程信息
 java.util.Vector msgStack;//信息栈
 java.util.Vector clientMsg;//记录客户发送的信息
 CommunicateThread comThread1;
 CommunicateThread comThread2;
 String string;//information in inforStack
 String clientName;//client thread name
 String broadcastInfor;//broadcast information=clientName+string;

 public BroadcastThread(ChatRoomServer cFrame){
  chatFrame2=cFrame;
  chatClients=chatFrame2.clients;
  clientMsg=chatFrame2.clientsInfor;
  //this.start();
 }

 public void broadcast(String str){//广播
  for(int k=0;k<chatClients.size();k++){//send to everyone分别调用每个连接线程,发送信息
   comThread2=(CommunicateThread)chatClients.get(k);
   comThread2.sendInformation(str);
  }
 }

 public void run(){
  try{
   while(true){
    for(int i=0;i<chatClients.size();i++){
     comThread1=(CommunicateThread)chatClients.get(i);
     msgStack=comThread1.inforStack;//得到每个连接的信息栈
     clientName=(String)clientMsg.get(i);//客户名
     //读取每个连接线程的信息栈并把信息发送出去
     for(int j=0;j<msgStack.size();j++){
      string=(String)msgStack.get(j);
      broadcastInfor=clientName+"->"+string;
      broadcast(broadcastInfor);
     }
     //clear the inforStack
     msgStack.removeAllElements();//清除以发送的信息

    }
    try{
     Thread.sleep(100);//version2
    }catch(InterruptedException ex){}
   }
  }catch(Exception e){}
 }

}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?