ServerSocket實現簡單的廣播系統
/**
* 服務端
*/
public class Server {
// 儲存客戶端所有連線
private static final List<Socket> socketList = Collections.synchronizedList(new ArrayList<>());
// 監聽某個客戶端的輸入,然後進行廣播
private static class Task implements Runnable {
private final Socket socket;
private final BufferedReader reader;
public Task(Socket socket) throws IOException {
this.socket = socket;
reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
}
@Override
public void run() {
try {
String msg;
while ((msg = reader.readLine()) != null) {
for (Socket skt : socketList) {
if (socket == skt) { continue; }
try {
PrintStream ps = new PrintStream(skt.getOutputStream());
ps.println(msg); // 注意這裡的換行
} catch (IOException e) {
socketList.remove(skt);
}
}
}
} catch (IOException e) {
socketList.remove(socket);
}
}
}
public static void main(String[] args) throws IOException {
ServerSocket serverSocket = new ServerSocket(8080);
while (true) {
Socket socket = serverSocket.accept(); // 阻塞
System.out.println("socket => " + socket);
socketList.add(socket);
new Thread(new Task(socket)).start();
}
}
}
/**
* 客戶端
*/
public class Client {
// 讀取服務端的資料,並輸出到控制檯
private static class Task implements Runnable {
private final BufferedReader reader;
public Task(Socket socket) throws IOException {
reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
}
@Override
public void run() {
try {
String msg;
while ((msg = reader.readLine()) != null) {
System.out.println(msg);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
public static void main(String[] args) throws IOException, InterruptedException {
Socket socket = new Socket("127.0.0.1", 8080);
new Thread(new Task(socket)).start();
PrintStream ps = new PrintStream(socket.getOutputStream());
String msg;
// 讀取控制檯輸入
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
while ((msg = reader.readLine()) != null) {
ps.println(msg);
}
}
}
相關文章
- 基於websocket的簡單廣播系統Web
- laravel-websockets 實現“低配版”廣播系統LaravelWeb
- 廣播接收器——接收系統廣播
- Java 基於UDP 實現單播、組播、廣播 Socket 程式設計JavaUDP程式設計
- 簡單快遞系統 java實現Java
- Laravel 廣播系統例子Laravel
- C#反射實現簡單的外掛系統C#反射
- GFS(谷歌檔案系統)的JAVA簡單實現谷歌Java
- JVM的ServerSocket是怎麼實現的(上)JVMServer
- JVM的ServerSocket是怎麼實現的(下)JVMServer
- Laravel 廣播系統工作原理Laravel
- Lumen/Laravel 整合 GatewayWorker (Workerman),實現簡單的聊天系統.LaravelGateway
- 基於Netty的Android系統IM簡單實現原理NettyAndroid
- 使用簡單的Java程式碼實現酒店管理系統Java
- UITabBarController移除系統自帶UITabBarButton簡單實現UItabBarController
- 實現簡單的輪播圖(單張圖片、多張圖片)
- 超簡單整合ML kit 實現聽寫單詞播報
- 利用回撥函式實現簡單的輪播圖效果函式
- Laravel 廣播入門,彈幕的實現Laravel
- 直播系統搭建,簡單實現Android應用的啟動頁Android
- 開源一個自用的Android事件分發中心庫,實現類似系統廣播功能。Android事件
- go語言實現的一款簡單的網盤系統Go
- 短視訊軟體開發,實現簡單的輪播圖效果
- 小區廣播背景音樂IP網路廣播系統方案設計概要
- 帶貨直播系統,實現簡單的換頭像並儲存
- 校園IP網路廣播系統方案
- 網易雲音樂推薦系統簡單實現系列
- 原始碼級別的廣播與監聽實現原始碼
- AOP的簡單實現
- 簡單的 HashMap 實現HashMap
- 實現簡單的BitMap
- ArrayList的簡單實現
- vue+nuxt+scss+node+express+MongoDB 實現的簡單文章釋出系統VueUXCSSExpressMongoDB
- 簡單輪播(1)
- 簡單輪播(3)
- 一個簡簡單單的紅點系統框架框架
- 中學校園IP網路廣播系統解決方案-校園數字IP廣播系統方案設計指南
- 做一個音影片點播系統要多久?操作越簡單越好