服务端
服务端
- 推送消息/新闻,本质其实就是群发消息
- 在服务器启动一条独立线程,专门负责推送新闻
在服务器端添加 Utility 工具类
在服务端新建 SendNewsToAllService 类
package com.qqserver.service;
import com.qqcommon.Message;
import com.utils.Utility;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
/**
* @Author: Gin
* @Description:
* @Modified By: Gin
* @Date: Created in 16:20 2021/10/20
*/
public class SendNewsToAllService implements Runnable{
@Override
public void run() {
while(true){
System.out.println("请输入服务器要推送的新闻/消息(输入 exit 表示退出推送消息的线程):");
String news = Utility.readString(100);
if("exit".equals(news)){
break;
}
// 构建一个消息,消息类型为群发消息
Message message = new Message();
message.setSender("服务器");
message.setContent(news);
message.setSendTime(new Date().toString());
System.out.println("服务器推送消息给所有人,说:" + news);
// 遍历当前所有的线程,得到 socket,发送 message
HashMap<String, ServerConnectClientThread> map = ManageServerConnectClientThread.getMap();
Iterator<String> iterator = map.keySet().iterator();
while (iterator.hasNext()) {
String onlineUserId = iterator.next().toString();
try {
ObjectOutputStream oos = new ObjectOutputStream(
map.get(onlineUserId).getSocket().getOutputStream());
oos.writeObject(message);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}