java實戰——網路聊天室
因特網已經成為了人們交流的海洋,上網的使用者越來越多,更多的人願意使用網路來認識別人,瞭解別人,這就是當下諸如qq、微信等聊天工具火熱的原因。
我們雖然不能立馬就開發出來一個像上述兩個一樣功能強大的聊天室,但我們可以自己製作一個簡單的聊天室。
我們採用傳統的Client/Server結構,功能類似於Web聊天室,使用者可以在聊天室內公開發言,也可以傳送給某個使用者實現私聊。架設好伺服器,用客戶端軟體登入上伺服器就可以聊天了。
先簡單介紹一下RMI吧,RMI是從java1.1就已經有了,是一種呼叫遠端主機上方法的技術使得分佈在不同虛擬機器中物件的外表和行為都像本地物件一樣。
RMI主要有以下優點:
1.面向物件:RMI可將完整的物件作為引數和返回值進行傳遞,而不僅僅是預定義的資料型別。也就是說,可以將類似java雜湊表這樣的複雜型別作為一個引數進行傳遞。
2.設計方式:物件傳遞功能使使用者可以在分散式計算中充分利用面向物件技術的強大功能,如二層和三層結構系統。
3.安全:RMI使用java內建的安全機制,保證下載執行程式時使用者系統的安全。
4.便於編寫和使用:RMI使得java遠端服務程式和訪問這些服務程式的java客戶端程式的編寫變得輕鬆簡單。使用者可以避免使用socket這樣底層的API,編寫應用程式時無需設計應用層的訊息協議。而且RMI可以使用HTTP進行通訊,從而能跨越代理伺服器和防火牆。
5.編寫一次,到處執行:任何基於RMI的系統可以100%移植到任何java虛擬機器上。
6.分散式垃圾收集:RMI採用其分散式垃圾收集功能收集不再被網路中任何客戶程式所引用的遠端服務物件。
7.平行計算:RMI採用多執行緒的處理方法。
在RMI中,呼叫遠端物件的物件稱為客戶端物件,而遠端物件被稱為伺服器物件。為了實現位置透明性,RMI引入了兩種特殊型別的物件——存根(Stub)和框架(Skeleton)。RMI的體系結構如下圖:
下面來看看程式的具體實現(原始碼請看最後):
首先是公共介面的定義:ChatServer和Chatter,不論伺服器端或者是客戶端都要用到這兩個介面。
接下來設計伺服器端程式模組:
先實現ChatServer介面,建立類ChatServerImpl。
再來定義一個UserInfo類來儲存使用者名稱和遠端客戶端物件之間的對應。
對服務端的介面加以設計,效果如圖(圖示有點大,不過不要在意這些細節emmm)。
下面進行客戶端的設計:
先對介面進行實現,建立類ChatterImpl。
頁面設計效果如下。
點選檔案,輸入ip進行連線,這裡使用本地的連線進行測試。
啟動伺服器。
輸入ip進行連線。
這邊開了兩個客戶端進行測試,效果如下。
再開啟一個客戶端,進行私聊測試,只有選擇的物件接收到了訊息,很成功!
各位可以關注公眾號:落餅楓林,傳送 網路聊天室 獲取原始碼,原始碼可以在eclipse上直接建立工程使用,如果有任何問題歡迎給我留言或在公眾號留言,謝謝!