李佳 毛崠博
摘 要:本系統(tǒng)主要利用Java語言,C/S架構,并結合了Socket網(wǎng)絡編程技術與Microsoft Office Access(數(shù)據(jù)庫軟件)技術,選擇TCP傳輸協(xié)議在兩臺計算機之間實現(xiàn)了文本與文件的實時傳輸功能和離線留言功能,進而實現(xiàn)局域網(wǎng)內計算機間的實時通信。
關鍵詞:實時通信;局域網(wǎng);網(wǎng)絡編程;服務器端;客戶端
中圖分類號:TP393.18
1 局域網(wǎng)內實時通信的發(fā)展概況
目前,國內外對局域網(wǎng)內通信的發(fā)展情況有一定差別。下面分別從國外和國內兩大方面對局域網(wǎng)內通信的發(fā)展情況進行介紹。
1.1 國外的發(fā)展概況
由于國外的計算機技術發(fā)展相對來講比較成熟,他們對充分利用內部網(wǎng)絡資源的認知比較早,并且很早前就已經(jīng)開發(fā)了相關的產(chǎn)品,所以現(xiàn)在各種以局域網(wǎng)為單位的實時通信系統(tǒng)已經(jīng)進入相對穩(wěn)定發(fā)展階段,在各個大小企業(yè)中也得到了良好的實際應用效果。
1.2 國內的發(fā)展概況
在國內,企業(yè)對局域網(wǎng)的實時通信系統(tǒng)認知和使用情況并不是很好,在局域網(wǎng)內實現(xiàn)文件傳輸和資源共享方面,各個企業(yè)單位還存在很大的缺陷。那么,基于局域網(wǎng)內部網(wǎng)絡開發(fā)的產(chǎn)品也就比較少,而且無論是從理論上或實踐上,我們的技術都還不夠完善,所以在企業(yè)中也就沒有得到廣泛的應用。
2 相關理論及基礎技術
本系統(tǒng)采用了Java編程語言,并結合了對Socket網(wǎng)絡編程和Microsoft Office Access數(shù)據(jù)庫技術以及TCP傳輸協(xié)議的應用。對各技術具體介紹如下。
2.1 Java語言
Java作為一種程序設計語言,它是面向對象的。通過網(wǎng)絡協(xié)議,我們可以直接或者間接的與其它計算機進行通信,這就是網(wǎng)絡編程的目的,要使兩臺計算機之間進行通信需解決兩個主要問題:一個是如何準確定位網(wǎng)絡上的主機地址;另外一個是定位到主機以后如何有效安全地進行通信[1]。
Java是一種提供了比較強大的網(wǎng)絡編程接口的網(wǎng)絡編程語言。針對不同層次的網(wǎng)絡通信,Java提供了4大類網(wǎng)絡功能,其中,TCP/IP是Internet使用的協(xié)議組,而Socket是該協(xié)議組的組合,Socket實現(xiàn)了兩臺計算機之間通過端口來實現(xiàn)通信,Socket類是在Java.net包中提供的,該包隱藏了Socket的具體實現(xiàn)細節(jié),使得程序員不需要自己編寫接口程序,就可以快速的實現(xiàn)網(wǎng)絡通信[2]。
2.2 Socket編程實現(xiàn)原理
進程之間要進行通信,那么首先就要建立各自的Socket,每個Socket都可以進行讀操作和寫操作,而進行讀和寫操作的時候,分別用到的就是Socket中的輸入流和輸出流。
建立連接后,客戶程序就可以向Socket里寫入自己的請求,在一個連接請求被服務器監(jiān)聽到后,客戶端和服務器就成功建立了一個通信連接。而在成功建立通信連接的過程中,被本地端口號綁定的客戶端會與一個Socket連接,客戶端可以通過這個Socket的寫操作來通知服務器,然后通過Socket的讀操作來得到數(shù)據(jù)。服務器也同樣地得到一個本地端口號,而且它還需要一個新的端口號來監(jiān)聽原始端口上的其它連接請求。而且服務器也可以給它的本地端口連接一個Socket并通過讀寫操作處理來自客戶端的請求[3]。
2.2.1 建立Socket應注意的問題
當建立一個通信用的Socket的時候,必須指出通信要使用什么樣的的風格,使用什么協(xié)議等,也就是需要注意下面的問題。
(1)在通信過程中是否必須始終面向一個連接,我們把這種情況形象地比作電話,我們打電話的時候首先要和對方的電話建立連接,在整個通話的過程中,我們會一直保持這個連接,直到雙方中的一方掛斷電話。另一種情況就是傳輸數(shù)據(jù)的過程中不需要建立連接,就像發(fā)送電報一樣,直接發(fā)送數(shù)據(jù)就可以了;
(2)在數(shù)據(jù)傳輸?shù)倪^程中是否允許數(shù)據(jù)丟失,有的通信風格能夠保證接受到的數(shù)據(jù)順序和發(fā)送時的順序是一致的,而有的不是這樣:既不能保證按順序到達,也不能保證數(shù)據(jù)是否丟失[4]。
2.2.2 從連接建立到結束的過程
從連接的建立到連接的結束,每個Socket應用都大致包含以下幾個基本步驟。
服務器端的Socket綁定于特定的端口,服務器偵聽Socket等待連接請求??蛻舳讼蚍掌鞫撕吞囟ǘ丝谔峤贿B接請求。服務器接受連接,產(chǎn)生一新的Socket,綁定到另一端口,由此Socket來處理和客戶端的交互,服務器繼續(xù)偵聽原來的Socket來接受其他客戶端的連接請求。服務器端每次當建立一個新的Socket連接的時候,主線程就啟動一個新的線程,負責服務器與客戶端的通信;而主線程繼續(xù)等待下一個客戶端的連接。當客戶端斷開連接后,子線程釋放其占用的所有Socket資源[5]。
連接成功后客戶端也會產(chǎn)生一個Socket,并通過它來與服務器端進行通信,要注意的是客戶端Socket并不與特定端口綁定。最后,服務器端和客戶端就通過讀取和寫入各自的Socket來進行通信。
2.3 Microsoft Office Access數(shù)據(jù)庫
本設計通過對Access數(shù)據(jù)庫的應用,更好的管理用戶信息、用戶列表。用戶可以修改自己的資料和密碼,查看其他用戶資料,隨意添加或刪除用戶。服務器端可以顯示在線用戶以及所有用戶資料。這所有的通信用戶信息都記錄在數(shù)據(jù)庫里,并以列表形式顯示到界面上,使系統(tǒng)好友界面更直觀、更友善。
2.4 TCP與UDP協(xié)議
TCP與UDP是工作在傳輸層的兩個核心協(xié)議,它們可以為應用層提供會話和數(shù)據(jù)報通信服務。雖然,在本設計中,編寫Java應用程序時,主要是在第4層也就是在應用層上完成的。但是,仍然需要掌握傳輸層的TCP和UDP協(xié)議,因為這將決定我們在編程時使用哪種Java類。
3 系統(tǒng)總體設計分析
3.1 系統(tǒng)設計目標
根據(jù)調研,本設計需要滿足以下幾個系統(tǒng)設計目標:
(1)實用性的原則。按照簡單實用的原則真正為局域網(wǎng)的實際工作服務,合理設計本系統(tǒng)。
(2)程序可擴展性的原則。采用開放的標準和接口,便于將來想要添加更多的功能。
(3)傳輸可靠性的原則。必須為用戶提供可靠的服務,尤其是要保證傳輸?shù)姆€(wěn)定性。
(4)友好性的原則。希望本設計對計算機知識了解很少的用戶也可以使用,所以系統(tǒng)操作上要求簡單方便,便于用戶使用。
3.2 系統(tǒng)總體結構
本系統(tǒng)采用目前比較流行的網(wǎng)絡通信模型C/S結構。在C/S結構中,服務器端與客戶端是上級和下級的關系。服務器端始終處于被動地等待客戶端提出連接請求,并給予響應。客戶端在需要服務器的時候就向服務器提出連接請求。
3.3 系統(tǒng)功能分析
從企業(yè)內部的實用性角度考慮,本系統(tǒng)應具備3大基本功能,即局域網(wǎng)內點對點文本傳輸功能,離線留言功能和文件傳輸功能。在設計時,應根據(jù)系統(tǒng)的設計目標,使安排布局上具有簡潔、流暢等特點,以及在編程時考慮傳輸?shù)姆€(wěn)定與快捷,真正做到“簡潔、高效、流暢、安全”的使用環(huán)境。根據(jù)以上的功能特點分析,本系統(tǒng)可由兩大模塊來實現(xiàn):服務器端模塊和客戶端模塊。其中,客戶端模塊實現(xiàn)兩個用戶之間的文本傳輸、離線留言和文件傳輸功能。
4 系統(tǒng)詳細設計
本系統(tǒng)對于主要模塊設計部分可以分為三大部分:服務器端模塊、客戶端模塊和系統(tǒng)功能模塊。其中服務器端模塊和客戶端模塊的設計主要通過套接字來完成服務器端與客戶端間的連通。功能模塊設計主要分為:文本實時傳輸和文件實時傳輸兩方面。下面分別對這些模塊的設計進行詳細的介紹。
4.1 服務器端與客戶端之間的整體工作模式
本系統(tǒng)通過Socket接口來實現(xiàn)客戶端、服務器端之間的通信,Socket是兩個程序進行雙向數(shù)據(jù)傳輸?shù)木W(wǎng)絡通信端點,主要由一個端口號和一個IP地址來標識。
服務器端首先要創(chuàng)建自己的Socket,并要把這個Socket與某一個端口綁定,然后通過accept()方法監(jiān)聽有無連接請求??蛻舳送瑯邮紫纫惨獎?chuàng)建自己的Socket,這個Socket會指明服務器程序所在的IP地址,這時就發(fā)出了自己的連接請求。
4.2 服務器端詳細業(yè)務流程
本系統(tǒng)中,首先服務器端處于開啟狀態(tài),時刻監(jiān)聽有無來自客戶端的連接請求。若發(fā)現(xiàn)客戶端發(fā)出連接請求,立即給予響應。在服務器端與客戶端連接后,服務器端可以查詢在線用戶,查詢所有用戶基本資料、用戶名、密碼等信息。在結束連接時,關閉服務器。
4.3 客戶端詳細業(yè)務流程
本系統(tǒng)中,欲使客戶端與服務器建立連接,首先客戶端需向服務器發(fā)送一個連接請求,服務器響應其請求后,雙方才能連通。然后,客戶端通過用戶名和密碼進行登錄。在登錄之前需要進行IP測試,當IP測試成功,既與服務器連接成功,此時客戶端用戶就可以與其他用戶進行實時通信,實現(xiàn)本系統(tǒng)功能。當用戶不進行通信時即可結束線程。
5 結束語
本設計最大優(yōu)點之一就是界面友好、簡單、用戶列表清晰易操作。即使從沒有使用過本系統(tǒng)的用戶,也可很快上手。所有功能界面都集成到一起,大大減少了界面的數(shù)量以及界面交換的不便。
它的另外一個優(yōu)點就是有很好的可擴展性,本設計采用的是設計模式,很好的運用了Java中的繼承和抽象類等特性。這種設計模式就使程序有了很好的擴展性。當想要加一些功能的時候,只要在抽象類中對想要加入功能的方法進行聲明,然后再用具體的實體類去實現(xiàn)就可以了,而不會對其他的程序造成影響,有很好的獨立性。
參考文獻:
[1]杜瑞慶,閆敬,李銀兵.Java中的數(shù)據(jù)報通訊方式[J].福建電腦,2007(04):189.
[2]王靜,曲鳳娟.基于Socket的多用戶并發(fā)通信的設計[J].福建電腦,2007(03):164.
[3]蘇宏良.儲能電池組遠程監(jiān)控系統(tǒng)研究與設計[D].武漢:武漢理工大學,2010.
[4]丁穎麗.三層計算構架中Logistic回歸分析的設計與實現(xiàn)[D].上海:東華大學,2008.
[5]陳更力,張青.基于Java Socket 網(wǎng)絡編程的一種新實現(xiàn)[J].電腦開發(fā)與應用,2006(06):13.
作者簡介:李佳(1988.01-),山東黃縣人,助理工程師,工學學士,研究方向:通信工程。
作者單位:國家新聞出版廣電總局二九二臺,山東青島 266000