broadcastthread.java

来自「用java socket技术实现多人聊天室」· Java 代码 · 共 58 行

JAVA
58
字号
package chatserver2;
import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.*;

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 + -
显示快捷键?