用 Java 一步一步建造自己的聊天室軟體(第一話) (Yinyin) (轉)

worldblog發表於2007-12-13
用 Java 一步一步建造自己的聊天室軟體(第一話) (Yinyin) (轉)[@more@]

並茂版請至:
two/JavaPaper/java_chat_room.pdf">

第零話
------------
藍圖 / The Plan:
我們將利用 Java 製作一個。這份將會簡單的
介紹 Java 是什麼,並大略的勾勒出這個程式的結構及運作方式。

咖啡杯
0.0.0
Java 是 Sun Microsystem 在 1995 年間推出的一種程式語言,這個語言擁有許多傳統語言沒有的特性。
0.0.1
除了 Java 天生的一些優勢外,他最大的魅力在於它提供的應用程式介面 (, Application Programming Interface),什麼是 API 呢?所謂 API是指作業環境所提供給程式設計者用來使喚、連結庫或是的函式呼叫或資料結構,換言之,就是或作業環境提供給應用程式與系統核心溝通的介面,像:ANSIC 中規定的 printf 就是用來向標準輸出輸出文字用的呼叫。所以,只要知道 Java 提供了哪些類別可供使用,就可以輕易的設計 Java 程式。
0.0.2
Java 語言由 Sun 發展到今天,已經成為一套十分龐大的環境,您可以
從 取得最新的 API 規格書,作為撰寫Java 程式時的參考。
是的,由於 Java 是個完全的導向語言,所以他的 API 其實就是一個龐大的類別庫,與系統溝通的函式被分門別類的包裝在各個類別之中。
0.0.3
要注意:Java 並不僅是一套軟體,而是一個規格。有許許多多的廠商可以根據這項規格提出他們自己的 Java 產品,程式設計者是針對 Java 這個平臺設計他們的程式,所撰寫的不是 程式,也不是 程式,而是Java 程式。Java 目前已經發展到了 1.4.1 版,目前主要有 IBM 和 Sun Microsystem 在個人上實作 Java 的系統環境。
0.0.4
Java 的規格可以分成兩部份:語言本身的規格和 Java 平臺的 API 也就是內建的類別庫的內容。這兩部份都一直演進中,其中類別庫的擴充是相當快的,這點可以從 的體積看的出來:從 1.1 版的 10MB 到 1.4.1 版的36 MB,語言本身的擴充就沒有那麼樣的迅速:預計在 1.5 版將會支援樣板。
0.0.5
毫無疑問的,Java 的發展會越來越有趣。

翔於藍天的鳥
0.1.0
在這裡精簡的簡介一下網路:透過電纜、或電,將電子支援設施加以連結,使之能透過傳輸資訊,就可以構成網路。那資料是怎麼從我們這頭傳到另外一端呢?簡單而言可以從下面這個表格來解釋:


"應用程式應用程式透過呼叫應用程式設計介面提供的函式送出資料。傳輸程式傳輸協議驅動程式接受來自應用程式的請求,將其包裝處理好後交給網路協議驅動程式,請他把資料送到指定的地址上。 網路協議驅動程式將傳輸協議驅動程式送交的資料貼好收件人地址後交給驅動程式,請網路裝置驅動程式控制網路裝置,把資料送出去。網路裝置驅動程式與網路硬裝置〈如:乙太網路卡〉直接相關,負責和硬體裝置直接溝通。

網路硬裝置接受來自裝置驅動程式的命令,把資料送到傳輸媒體上頭。
這部份可能是乙太網路卡、記號環網路卡、藍芽裝置、埠或是無線電
終端器等等。 傳輸媒體訊號在這層跑。這部份可能是雙絞線、同軸心纜、
光纖、水、空氣或真空等等。網路硬裝置從傳輸媒體上收受訊號,整理
後通知驅動程式:「喂!你的貨到了,記得付錢。」

網路裝置驅動程式收到網路硬裝置的通知後將資料再加以整理與檢查後,把資料送到網路協議驅動程式。網路協議驅動程式拿到網路裝置送來的資料後,網路協議驅動程式會看看拿到的東西是不是要交給他的,如果不是,就把資料丟了,不然就交給傳輸協議驅動程式。傳輸協議驅動程式接到網路協定驅動程式送來的資料,加以整理與檢查後,把資料交給應用程式。應用程式應用程式透過呼叫應用程式設計介面的函式取得資料。"

0.1.1
Java 目前只認識 (Internet Protocol) 這種網路型態,以及 TCP 和 UDP 這兩種
傳輸通訊協議。而網際網路 (Internet) 所採用的正是 IP 這種網路通訊協議。
0.1.2
TCP 和 UDP 有一些差異,其中三個最大的差異就是:TCP 會保證資料絕對會送到,若沒送到的話會通知應用程式,而 UDP 則沒有這種保障,送出去的資料就像斷了線的風箏般。TCP 還保障資料接收後順序會和傳送時的順序相同,也就是若您的程式先把甲這個資料包裹送出再把乙這個資料包裹送出,另一端的程式將會先收到甲包裹在收到乙包裹,而UDP 則不提供這樣的保障。  因為TCP 對資料的傳遞提供了種種的保障,所以 TCP 加諸於網路的負擔也就比 UDP要來的大,速度也就自然會慢一些。

0.1.3
絕大部份的程式都是使用 作為通訊協議,這樣就可以省去檢查資料完整
性及連續性的問題,如果您的程式不需要這兩個特性,那您就可以考慮採用UDP/IP作為您的程式的網路資料傳輸媒介。
0.1.4
基本上,因為有應用程式介面包裝過,透過網路存取資料就像讀寫檔案一般,
相當的簡單。
0.1.5
回到 Java 語言本身,下面列出一些常見到的名詞及大略的說明:

類別 (Class):
===========
是一些資料域位和用來處理這些資料的方法所成的集合體,一個類別使用關鍵詞 class 搭配類別的存取層級、類別的名稱和類別的繼承狀態來宣告。
要根據某一類別來產生物件實體,必須使用關鍵詞 new 並加上欲產生的類別名稱及建構引數,產生出來的物見實體稱為物件 () 或稱為該類別的一份案例 (Instance) 如:Button  str=new Button("確定"); 則稱 str 是 Button 的一
份案例 (Instance) 或稱 str 是一個 Button  類別的物件。

繼承:
======
Java 支援物件的繼承,繼承一個類別只要在宣告這個新類別時使用 extends
關鍵詞加上預計成的類別名稱即可。

抽象方法 (Abstract Methods):
=======================
抽象方法就是 C++ 中的純虛擬函式,要宣告抽象方法只要在宣告方法時加
上關鍵詞abstract 即可。

抽象類別 (Abstract Class):
====================
一個類別若擁有一個以上個抽象方法,那他就是個抽象類別。抽象類別必須在宣告時加上關鍵詞 abstract 來作宣告。因為抽象類別是不完整的,所以您不能產生抽象類別的物件實體。

介面 (Interface):
=============
Java為了避免一個類別同時繼承兩個以上的類別時所造成模稜兩可的問題,
限制一個類別只能繼承自一個類別。但是,這麼做在需要讓一個類別擁有多種的特性時會顯得很不方便,介面便是為了彌補這一點而誕生。介面之中僅允許宣告常數和抽象方法以規避名稱衝突的問題。要實作一個介面,必須在宣告新類別時使用關鍵詞implements 宣告。

棄置 (Deprecated):
==============
在 Java 演進的過程中,有些標準類別的方法會因為某些原因被更名或是丟棄,為了維持向前相容性,這些方法大多都還會留在標準套件內,但並不建議新的程式去使用他們。API 規格書會在被棄置的方法旁列出替代的新方法或解決方案。

0.1.6
Java 語言本身的結構與語法請參考書本或是 Sun Microsystem 所提供的 The Java
Language Specification。

炭鉛筆
0.2.0
好,我們來看看這個將要被我們寫出來的聊天室程式大概會是長什麼樣子?
下面這是我所想到的介面:

0.2.1
那資料要如何傳送呢?這有許多的方式:星狀、樹狀或環狀都是可行的做法。
其中因為星狀的架構比較容易實作也比較容易管理,所以我們將採用這種結構
,下面是星狀架構的示意圖:

0.2.2
那和使用者端程式會說些啥來達成讓使用者聊天的目的呢?下面是我想到的內容,當然您也可以有您的一套:首先終端使用者連上服務端,和服務端說:
「早,我是某甲。」接著,只要有訊息送入服務端,服務端就會把這個訊息轉送給所有和他搭上線的人,包含送出訊息的人。

0.2.3
換句話說,我們把使用者端顯示訊息用視窗的內容管理權交由服務端來管理,如此可以確保所有聊天室內的成員會看到相同的內容。一但使用者端程式連上
服務端的程式,使用者端的程式第一句說的話就是表明自己的身分。此後每一
句話,都是要轉送給所有掛在那個伺服器上的使用者。使用者端如果聽到服務
端說話,就把服務端說的話貼到訊息視窗上顯示給使用者看。

0.2.4
綜合上面所說,我們將會撰寫兩組程式:使用者端的程式和服務端的程式。整
個聊天室需要兩組程式同時運轉,才能夠順利運作。其中,使用者端的程式將
會有美美的圖形化使用者介面 (GUI) 以方便終端使用者操作。至於服務端的程
式則一切從簡,畢竟它可是整個系統的核心,不能夠有任何的錯誤存在的。

第零話:藍圖結束 
  (代續)


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-992941/,如需轉載,請註明出處,否則將追究法律責任。

相關文章