使用JAVA編寫網路通訊程式

才智咖 人氣:2.63W

摘要:本文闡述了使用JAVA程式語言對基於客戶/伺服器模式的編寫通訊程式,討論了SOCKET機制、輸入輸出流以及程式實碼。 關鍵詞 JAVA,網路,SOCKET,APPLET 網路上的系統結構多為客戶/伺服器模式,伺服器端負責資料和影象等的儲存、維護、管理以及傳遞,客戶端則負責人機介面的操作、送出需求及顯示收回的資料。

使用JAVA編寫網路通訊程式

下面介紹一下如何使用JAVA來進行網路程式設計:

1) 由於客戶端通過IE同伺服器建立聯絡,所以客戶端使用Applet,伺服器端使用Application;

2) 伺服器應設定成多執行緒,應答多個客戶的請求;

3) 兩端通訊使用SOCKET機制。

1 Java中輸入/輸出流概念:

過濾流DataInputStream 和DataOutputStream 除了分別作為FilterInputStream 和FilterOutputStream的子類外,還分別實現了介面DataInput 和DataOutput。介面DataInput 中定義的主要包括從流中讀取基本型別的資料、讀取一行資料、或者讀取指定長度的位元組數,如readBoolean() readInt()、readLine()、readFully()等。介面DataOutput中定義的方法主要是向流中寫入基本型別的資料或者寫入一定長度的位元組陣列,如writeChar()、writeDouble() DataInputStream可以從所連線的輸入流中讀取與機器無關的基本型別資料,用以實現一種獨立於具體平臺的輸入方式;DataInputStream 可以向所連線的輸出流寫入基本型別的資料。

2 Socket 機制

Socket是面向客戶/伺服器模型設計的,網路上的兩個程式通過一個雙向的通訊連線實現資料的交換,這個雙向鏈路的一端稱為一個Socket。 Socket通常用來實現客戶方和服務方的連線。客戶程式可以向Socket寫請求,伺服器將處理此請求,然後通過Socket將結果返回給使用者。

Socket通訊機制提供了兩種通訊方式:有聯接和無聯接方式,分別面向不同的應用需求。使用有聯接方式時,通訊鏈路提供了可靠的,全雙工的位元組流服務。在該方式下,通訊雙方必須建立一個聯接過程並建立一條通訊鏈路,以後的網路通訊操作完全在這一對程序之間進行,通訊完畢關閉此聯接過程。使用無聯接方式時其系統開銷比無聯接方式小,但通訊鏈路提供了不可靠的資料報服務,不能保證信源所傳輸的資料一定能夠到達信宿。在該方式下,通訊雙方不必建立一個聯接過程和建立一條通訊鏈路,網路通訊操作在不同的主機和程序之間轉發進行。

 3 Java語言

Java語言的優點主要表現在:簡單、物件導向、多執行緒、分佈性、體系結構中立、安全性等方面。

(1) 簡單性

Java與C++語言非常相近,但Java比C++簡單,它拋棄了C++中的一些不是絕對必要的功能,如標頭檔案、預處理檔案、指標、結構、運算子過載、多重繼承以及自動強迫同型。 Java實現了自動的垃圾收集,簡化了記憶體管理的工作。這使程式設計更加簡便,同時減少了出錯的可能。

(2) 物件導向

Java提供了簡單的類機制和動態的構架模型。物件中封裝了它的狀態變數和方法,很好地實現了模組化和資訊隱藏;而類則提供了一類物件的原型,通過繼承和過載機制,子類可以使用或重新定義父類或超類所提供的方法,從而既實現了程式碼的複用,又提供了一種動態的解決方案。

Java是一種完全物件導向的程式設計語言,它除了陣列、布林和字元三個基本資料型別外的其它類都是物件,它不再支援全域性變數。在Java中,如果不建立新類就無法建立程式,Java程式在執行時必須先建立一個類的例項,然後才能提交執行。

Java同樣支援繼承特性,Java的類可以從其它類中繼承行為,但Java只支援類的單重繼承,即每個類只能從一個類中繼承。

Java支援介面,介面允許程式設計師定義方法但又不立即實現,一個類可以實現多個介面,利用介面可以得到多重繼承的`許多優點而又沒有多重繼承的。

(3) 多執行緒

多執行緒使應用程式可以同時進行不同的操作,處理不同的事件。在多執行緒機制中,不同的執行緒處理不同的任務,他們之間互不干涉,不會由於一處等待其他部分,這樣容易實現網路上的實時互動操作。

Java程式可以有多個執行執行緒,如可以讓一個執行緒進行復雜的,而讓另一個執行緒與使用者進行互動,這樣使用者可以在不中斷計算執行緒的前提下與系統進行互動。多執行緒保證了較高的執行效率。 (4) 分佈性

Java是面向網路的語言。通過它提供的類庫可以處理TCP/IP協議,使用者可以通過URL地址在網路上很方便的訪問其他物件。

(5) 體系結構中立

Java是一種網路語言,為使Java程式能在網路的任何地方執行,Java直譯器生成與體系結構無關的位元組碼結構的檔案格式。Java為了做到結構中立,除生成機器無關的位元組碼外,還制定了完全統一的語言文字,如Java的基本資料型別不會隨目標機的變化而變化,一個整型總是32位,一個長整型總是64位。

為了使Java的應用程式能不依賴於具體的系統,Java語言環境還提供了用於訪問底層作業系統功能的類組成的包,當程式使用這些包時,可以確保它能執行在各種支援Java的平臺上。

: 一般的語言包。其中包括用於字串處理、多執行緒、異常處理和數字函式等的類,該包是實現Java程式執行平臺的基本包

: 實用工具包。其中包括雜湊表、堆疊、時間和日期等

: 基於流模型的輸入/輸出包。該包用統一的流模型實現了各種格式的輸入/輸出,包括檔案系統、網路和裝置的輸入/輸出等

: 網路包。該包支援TCP/IP協議,其中提供了socket、URL和WWW的程式設計介面

: 抽象視窗工具集。其中實現了可以跨平臺的圖形使用者介面元件,包括視窗、選單、滾動條和對話方塊等

et: 支援applet程式設計的基本包

(6) 安全性

用於網路、分佈環境下的Java必須要防止病毒的入侵,Java不支援指標,一切對記憶體的訪問都必須通過物件的例項變數來實現,這樣就防止了程式設計師使用欺騙手段訪問物件的私有成員,同時也避免了指標操作中容易產生的錯誤。

4 JAVA工具

(1) JDK

1) Java編譯器

Java編譯器將Java原始碼檔案編譯成可執行的Java位元組碼。Java原始碼檔案的副檔名為 ,Java編譯器把這種副檔名的檔案編譯成副檔名為s的檔案。原始檔中的每個類在編譯後都將產生一個class檔案,這意味一個Java原始碼檔案可能編譯生成多個class檔案。

2) Java直譯器

Java直譯器對編譯生成的位元組碼格式的可執行程式的執行提供支援,它是執行非圖形Java程式的命令列工具。

3) Appletviewer

它是Java Applet的簡單測試工具,可使用它來測試Java Applet程式,而不需要WWW瀏覽器的支援。

(2) Visual J++

Visual J++ 集成了視覺化介面設計、互動式除錯、程式碼編輯、聯機幫助資訊和介紹如何快速掌握該開發環境的實用嚮導等多項功能,同時具有能充分利用Active X和COM新技術的優勢。利用Visual J++可建立互動性很強的Internet應用程式,是難得的Java 開發系統。 5 客戶機/伺服器通訊的實現:

(1) Application 同 Applet 的通訊

兩端通過Socket機制進行連線:

1) 客戶端的程式設計流程:

 開啟Socket,新建一個套接字;

 為套接字建立一個輸入和輸出流;

 根據伺服器協議從套接字讀入或向套接字寫入;

 清除套接字和輸入/輸出流;

2)伺服器端的程式設計流程:

 開啟Server Socket,建立一個伺服器型套接字和一個普通套接字,伺服器型套接字在指定埠為客戶端請求的Socket 服務;

 使用ServerSocket類的accept()方法使伺服器型套接字處於監聽狀態並把監聽結果返回給普通套接字;

 為該普通套接字建立輸入和輸出流;

 從輸入和輸出流中讀入或寫入位元組流,進行相應的處理,並將結果返回給客戶端;

 在客戶端和伺服器工作結束後關閉所有的物件,如伺服器型的套接字,普通套接字,輸入和輸出流。

正是由於Java系統具有基於Socket的靈活通訊機制,因而其應用程式能自由地開啟和訪問網路上的物件,就象在本地檔案系統中一樣。

(2) Applet之間的通訊:

Applet之間的通訊使用Applet Context類的getApplet()方法。