iT邦幫忙

0

day8 多執行緒 + Socket Server(每個 Client 開一條 Thread)

  • 分享至 

  • xImage
  •  

執行緒(Thread)是在程式裡同時做多件事的最小單位。
單執行緒 vs 多執行緒
--單執行緒,一次只能做一件事
--多執行緒,多件事同時進行
執行緒 = 讓程式「同時做多件事」的機制
沒有執行緒,程式只能「一件事做完才做下一件」;有執行緒,就能「多工處理」。
https://ithelp.ithome.com.tw/upload/images/20251004/20179429D5NSpxBAWA.pnghttps://ithelp.ithome.com.tw/upload/images/20251004/20179429WhJGIaX8vQ.png
在終端機跑 成功連線
https://ithelp.ithome.com.tw/upload/images/20251004/20179429tbyrGJx8oG.pnghttps://ithelp.ithome.com.tw/upload/images/20251004/20179429ylwfhw4S5r.png

ServerSocket serverSocket = new ServerSocket(port);
這行代表:建立一個「伺服器端的插座」ServerSocket,等待別人(Client)來連線

Socket client = serverSocket.accept();
這行會阻塞(Block)程式,直到有人連進來,一旦有 Client 連進來,就產生一個 Socket 物件,代表這位客人

new Thread(new ClientHandler(client)).start();
用多執行緒處理每個連線,每來一個 Client,我們就開一條 Thread 去服務他
好處:可以同時接兩個以上的 Client,不會卡住主程式

BufferedReader reader = new BufferedReader(newInputStreamReader(client.getInputStream()));
PrintWriter writer = new PrintWriter(client.getOutputStream(), true);
ClientHandler 負責收訊息 + 回覆
reader:用來 接收 Client 傳來的文字
writer:用來 回傳訊息到 Client

今天主要學做一個簡單的 Server 可以同時連接多個 Client。我用 ServerSocket 等待連線,然後用BufferedReader(這是今天剛學到的) 讀 Client 的訊息,用 PrintWriter 回傳訊息。每個 Client 都開一個 Thread,這樣一個人輸入也不會卡住整個 Server,讓我第一次真正理解什麼是多執行緒。
最後用 Terminal 的 nc 測試 Client 時,看到訊息即時回傳,覺得很有成就感。
這堂課讓我發現,Java 不只是做運算,也可以寫即時通訊程式,像聊天室或網路應用都可以用到,也讓我更熟悉 Socket 和 Thread 的用法。


圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言