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程式設計
- Laravel 廣播系統例子Laravel
- Laravel 廣播系統工作原理Laravel
- Android系統廣播(轉)Android
- android: 接收系統廣播Android
- 單播、多播(組播)和廣播的區別
- 簡單快遞系統 java實現Java
- Laravel 廣播入門,彈幕的實現Laravel
- 實現簡單的輪播圖(單張圖片、多張圖片)
- node.js實現的簡單udp廣播伺服器和客戶端程式碼例項Node.jsUDP伺服器客戶端
- 學生管理系統java簡單實現Java
- C#反射實現簡單的外掛系統C#反射
- GFS(谷歌檔案系統)的JAVA簡單實現谷歌Java
- 系統引導載入器的簡單實現
- 小區廣播背景音樂IP網路廣播系統方案設計概要
- JVM的ServerSocket是怎麼實現的(上)JVMServer
- JVM的ServerSocket是怎麼實現的(下)JVMServer
- 校園IP網路廣播系統方案
- Laravel Broadcast——廣播系統原始碼剖析LaravelAST原始碼
- 超簡單整合ML kit 實現聽寫單詞播報
- Lumen/Laravel 整合 GatewayWorker (Workerman),實現簡單的聊天系統.LaravelGateway
- 使用簡單的Java程式碼實現酒店管理系統Java
- 基於Linux系統的影片點播系統的實現(轉)Linux
- 利用回撥函式實現簡單的輪播圖效果函式
- 原始碼級別的廣播與監聽實現原始碼
- SOCKET實現廣播(BoardCast)的傳送和接收 (轉)AST
- 開源一個自用的Android事件分發中心庫,實現類似系統廣播功能。Android事件
- 中學校園IP網路廣播系統解決方案-校園數字IP廣播系統方案設計指南
- 用張量廣播機制實現神經網路反向傳播神經網路反向傳播
- win10系統遊戲中如何設定廣播Win10遊戲
- Laravel + 微信小程式 websocket 搭建廣播訊息系統Laravel微信小程式Web
- 基於Netty的Android系統IM簡單實現原理NettyAndroid
- 網易雲音樂推薦系統簡單實現系列
- UITabBarController移除系統自帶UITabBarButton簡單實現UItabBarController
- 基於Linux的影片點播系統的實現(轉)Linux