使用JAVA編寫網(wǎng)絡(luò)通信程序_第1頁
使用JAVA編寫網(wǎng)絡(luò)通信程序_第2頁
免費(fèi)預(yù)覽已結(jié)束,剩余6頁可下載查看

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、1 / 7使用 JAVA 編寫網(wǎng)絡(luò)通信程序摘要本文闡述了使用 JAVA 編程語言對(duì)基于客戶/服務(wù)器模式的編寫通信程序,討論了SOCKET 機(jī)制、輸入輸出流以及程序?qū)嵈a。關(guān)鍵詞JAVA,網(wǎng)絡(luò),SOCKET,APPLET網(wǎng)絡(luò)上的系統(tǒng)結(jié)構(gòu)多為客戶 /服務(wù)器模式,服務(wù)器端負(fù)責(zé)數(shù)據(jù)和圖像等的存儲(chǔ)、維護(hù)、 管理以及傳遞,客戶端則負(fù)責(zé)人機(jī)界面的操作、送出需求及顯示收回的數(shù)據(jù)。下面介紹一下如何使用 JAVA 來進(jìn)行網(wǎng)絡(luò)編程:1由于客戶端通過 IE 同服務(wù)器建立聯(lián)系,所以客戶端使用Applet,服務(wù)器端使用 Application;2服務(wù)器應(yīng)設(shè)置成多線程,應(yīng)答多個(gè)客戶的請(qǐng)求;3兩端通信使用 SOCKET 機(jī)制。

2、1Java 中輸入/輸出流概念:過濾流 Data In putStream和 DataOutputStream除了分別作為 Filter In putStream和 FilterOutputStream 的子類外,還分別實(shí)現(xiàn)了接口 DataInput和 DataOutput。接口 Data In put 中定義的主要包括從流中讀取基本類型的數(shù)據(jù)、讀取一行數(shù)據(jù)、或者讀取指定長度的 字節(jié)數(shù),如 readBoolean(readInt(、readLine(、readFully(等。接口 DataOutput 中定義的方法主要是向流中寫入 基本類型的數(shù)據(jù)或者寫入一定長度的字節(jié)數(shù)組,如 writeCha

3、r( 、 writeDouble(DataI nputStream 可以從所連接的輸入流中讀取與機(jī)器無關(guān)的基本類型數(shù)據(jù),用以實(shí)現(xiàn) 一種獨(dú)立于具體平臺(tái)的輸入方式; DataInputStream 可以向所連接的輸出流寫入基本類型的數(shù)據(jù)。2Socket機(jī)制Socket 是面向客戶/服務(wù)器模型設(shè)計(jì)的,網(wǎng)絡(luò)上的兩個(gè)程序通過一個(gè)雙向的通訊連接實(shí) 現(xiàn)數(shù)據(jù)的交換,這個(gè)雙向鏈路的一端稱為一個(gè)Socket。Socket 通常用來實(shí)現(xiàn)客戶方和服務(wù)方的連接??蛻舫绦蚩梢韵騍ocket 寫請(qǐng)求,服務(wù)器將處理此請(qǐng)求,然后通過 Socket 將結(jié)果返回給用戶。Socket 通信機(jī)制提供了兩種通訊方式:有聯(lián)接和無聯(lián)接方式,

4、分別面向不同的應(yīng)用需求 。使用有聯(lián)接方式時(shí),通信鏈路提供了可靠的,全雙工的字節(jié)流服務(wù)。在該方式下, 通信雙方必須創(chuàng)建一個(gè)聯(lián)接過程并建立一條通訊鏈路,以后的網(wǎng)絡(luò)通信操作完全在這 一對(duì)進(jìn)程之間進(jìn)行,通信完畢關(guān)閉此聯(lián)接過程。使用無聯(lián)接方式時(shí)其系統(tǒng)開銷比無聯(lián) 接方式小,但通信鏈路提供了不可靠的數(shù)據(jù)報(bào)服務(wù),不能保證信源所傳輸?shù)臄?shù)據(jù)一定 能夠到達(dá)信宿。在該方式下,通信雙方不必創(chuàng)建一個(gè)聯(lián)接過程和建立一條通訊鏈路, 網(wǎng)絡(luò)通信操作在不同的主機(jī)和進(jìn)程之間轉(zhuǎn)發(fā)進(jìn)行。3Java 語言Java 語言的優(yōu)點(diǎn)主要表現(xiàn)在:簡單、面向?qū)ο?、多線程、分布性、體系結(jié)構(gòu)中立、安 全性等方面。(1簡單性Java 與 C+語言非常相近,

5、但 Java 比 C+簡單,它拋棄了 C+中的一些不是絕對(duì)必要的 功能,如頭文件、預(yù)處理文件、指針、結(jié)構(gòu)、運(yùn)算符重載、多重繼承以及自動(dòng)強(qiáng)迫同 型。Java 實(shí)現(xiàn)了自動(dòng)的垃圾收集,簡化了內(nèi)存管理的工作。這使程序設(shè)計(jì)更加簡便,同時(shí)減少了出錯(cuò)的可能(2 面向?qū)ο?Java 提供了簡單的類機(jī)制和動(dòng)態(tài)的構(gòu)架模型。對(duì)象中封裝了它的狀態(tài)變量和方法,很 好地實(shí)現(xiàn)了模塊化和信息隱藏;而類則提供了一類對(duì)象的原型,通過繼承和重載機(jī)制 ,子類可以使用或重新定義父類或超類所提供的方法,從而既實(shí)現(xiàn)了代碼的復(fù)用,又 提供了一種動(dòng)態(tài)的2 / 7解決方案。Java 是 一種完全面向?qū)ο蟮某绦蛟O(shè)計(jì)語言,它除了數(shù)組、布爾和字符三個(gè)

6、基本數(shù)據(jù)類 型外的其它類都是對(duì)象,它不再支持全局變量。在Java 中,如果不創(chuàng)建新類就無法創(chuàng)建程序,Java 程序在運(yùn)行時(shí)必須先創(chuàng)建一個(gè)類的實(shí)例,然后才能提交運(yùn)行。Java 同樣支持繼承特性,Java 的類可以從其它類中繼承行為,但 Java 只支持類的單重繼 承,即每個(gè)類只能從一個(gè)類中繼承。Java 支持界面,界面允許程序員定義方法但又不立即實(shí)現(xiàn),一個(gè)類可以實(shí)現(xiàn)多個(gè)界面 ,利用界面可以得到多重繼承的許多優(yōu)點(diǎn)而又沒有多重繼承的。(3多線程多線程使應(yīng)用程序可以同時(shí)進(jìn)行不同的操作,處理不同的事件。在多線程機(jī)制中,不 同的線程處理不同的任務(wù),他們之間互不干涉,不會(huì)由于一處等待其他部分,這樣容 易實(shí)現(xiàn)

7、網(wǎng)絡(luò)上的實(shí)時(shí)交互操作。Java 程序可以有多個(gè)執(zhí)行線程,如可以讓一個(gè)線程進(jìn)行復(fù)雜的,而讓另一個(gè)線程與用 戶進(jìn)行交互,這樣用戶可以在不中斷計(jì)算線程的前提下與系統(tǒng)進(jìn)行交互。多線程保證 了較高的執(zhí)行效率。(4分布性Java 是面向網(wǎng)絡(luò)的語言。通過它提供的類庫可以處理TCP/IP 協(xié)議,用戶可以通過 URL地址在網(wǎng)絡(luò)上很方便的訪問其他對(duì)象。(5體系結(jié)構(gòu)中立Java 是 一種網(wǎng)絡(luò)語言,為使 Java 程序能在網(wǎng)絡(luò)的任何地方運(yùn)行, Java 解釋器生成與體系結(jié)構(gòu)無關(guān)的字節(jié)碼結(jié)構(gòu)的文件格式。Java 為了做到結(jié)構(gòu)中立,除生成機(jī)器無關(guān)的字節(jié)碼外,還制定了完全統(tǒng)一的語言文本,如Java 的基本數(shù)據(jù)類型不會(huì)隨目標(biāo)

8、機(jī)的變化而變化,一個(gè)整型總是 32 位,一個(gè)長整型總是 64 位。為了使 Java 的應(yīng)用程序能不依賴于具體的系統(tǒng),Java 語言環(huán)境還提供了用于訪問底層操作系統(tǒng)功能的類組成的包,當(dāng)程序使用這些包時(shí),可以確保它能運(yùn)行在各種支持Java的平臺(tái)上。java.lang:一般的語言包。其中包括用于字符串處理、多線程、異常處理和數(shù)字函數(shù)等的類,該 包是實(shí)現(xiàn)Javag序運(yùn)行平臺(tái)的基本包java.util:實(shí)用工具包。其中包括哈希表、堆棧、時(shí)間和日期等java.io:基于流模型的輸入 /輸出包。該包用統(tǒng)一的流模型實(shí)現(xiàn)了各種格式的輸入/輸出,包括文件系統(tǒng)、網(wǎng)絡(luò)和設(shè)備的輸入 /輸出等java .net:網(wǎng)絡(luò)包。

9、 該包支持 TCP/IP 協(xié)議, 其中提供了 socket、 URL 和 WWW 的編程接口 java.awt:抽象窗口工具集。其中實(shí)現(xiàn)了可以跨平臺(tái)的圖形用戶界面組件,包括窗口、菜單、滾 動(dòng)條和對(duì)話框等java.applet:支持 applet 程序設(shè)計(jì)的基本包(6安全性用于網(wǎng)絡(luò)、分布環(huán)境下的 Java 必須要防止病毒的入侵,Java 不支持指針,一切對(duì)內(nèi)存的3 / 7訪問都必須通過對(duì)象的實(shí)例變量來實(shí)現(xiàn),這樣就防止了程序員使用欺騙手段訪問對(duì)象 的私有成員,同時(shí)也避免了指針操作中容易產(chǎn)生的錯(cuò)誤。4JAVA 工具(1JDK1Java 編譯器Java 編譯器將 Java 源代碼文件編譯成可執(zhí)行的 J

10、ava 字節(jié)碼。 Java 源代碼文件的擴(kuò)展名為 java,Java 編譯器把這種擴(kuò)展名的文件編譯成擴(kuò)展名為.class 的文件。源文件中的每個(gè)類在編譯后都將產(chǎn)生一個(gè) class 文件,這意味一個(gè) Java 源代碼文件可能編譯生成多個(gè) class 文 件。2Java 解釋器Java 解釋器對(duì)編譯生成的字節(jié)碼格式的可執(zhí)行程序的運(yùn)行提供支持,它是運(yùn)行非圖形Java 程序的命令行工具。3Appletviewer它是 JavaApplet 的簡單測試工具,可使用它來測試 JavaApplet 程序,而不需要 WWW 瀏覽器的支持。(2Visual集成了可視化界面設(shè)計(jì)、交互式調(diào)試、代碼編輯、聯(lián)機(jī)幫助信息

11、和介紹如何快速掌握 該開發(fā)環(huán)境的實(shí)用向?qū)У榷囗?xiàng)功能,同時(shí)具有能充分利用ActiveX 和 COM 新技術(shù)的優(yōu)勢。利用 VisualJ+可創(chuàng)建交互性很強(qiáng)的 In ternet 應(yīng)用程序,是難得的 Java開發(fā)系統(tǒng)5客戶機(jī)/服務(wù)器通信的實(shí)現(xiàn):(1Applicati on同Applet的通信兩端通過 Socket 機(jī)制進(jìn)行連接:1客戶端的編程流程:TT打開 Socket,新建一個(gè)套接字; 為套接字建立一個(gè)輸入和輸出流;”根據(jù)服務(wù)器協(xié)議從套接字讀入或向套接字寫入;清除套接字和輸入/輸出流;”2服務(wù)器端的編程流程:打開 ServerSocket,創(chuàng)建一個(gè)服務(wù)器型套接字和一個(gè)普通套接字,服務(wù)器型套接字在指

12、定端口為客 戶端請(qǐng)求的 Socket服務(wù);使用 ServerSocket 類的 accept(方法使服務(wù)器型套接字處于監(jiān)聽狀態(tài)并把監(jiān)聽結(jié)果返回 給普通套接字;”為該普通套接字創(chuàng)建輸入和輸出流;從輸入和輸出流中讀入或?qū)懭胱止?jié)流,進(jìn)行相應(yīng)的處理,并將結(jié)果返回給客戶端;Tf在客戶端和服務(wù)器工作結(jié)束后關(guān)閉所有的對(duì)象,如服務(wù)器型的套接字,普通套接字,輸入和 輸出流。正是由于 Java 系統(tǒng)具有基于 Socket 的靈活通信機(jī)制,因而其應(yīng)用程序能自由地打開和訪 問網(wǎng)絡(luò)VisualJ+J+4 / 7上的對(duì)象,就象在本地文件系統(tǒng)中一樣。5 / 7(2Applet 之間的通信:Applet 之間的通信使用 Ap

13、pletCon text 類的 getApplet(方法。只要在程序中加入Appleton eapplet=getAppletC on text(.getApplet(。便可使用n ame 為 first 的中的方法了。在該課題中大量使用了該種通信方法,因?yàn)閷iT同服務(wù)器端通信的Applet 中包含接收信息方法和發(fā)送信息方法,所有客戶端的Applet 都要使用負(fù)責(zé)通信的Applet 中的方法,所以客戶端的 Applet 同負(fù)責(zé)通信的 Applet 必須進(jìn)行通信。6 程序 /服務(wù)器端程序 S.java負(fù)責(zé)與客戶端通信importimportimportimportjava.io.*。 .*。 ja

14、va.lang.*。T2。classThreadEchoHandlerextendsThread/創(chuàng)建線程T2theT2=newT2(。Scounter。ThreadEchoHandler(Socketi,intcincoming=i 。counter=c。publicvoidrun(tryDataInputStreamin=newDataInputStream(incoming.getInputStream( 。DataOutputStream out=new DataOutputStream(incoming.getOutputStream(。System

15、.out.println(hello 。booleandone=false。while(!doneStringaa=。String str=in.readUTF( 。/從客戶端得到字符串/在此加入各自的服務(wù)程序System.out.println(str。theT2.pass(str。/解碼theT2.tongji( 。/修改監(jiān)控庫中的信息aa=theT2.guan(。/操縱數(shù)據(jù)庫System.out.println(stringzis:+aa 。if(pareTo(null!=0/若是查詢數(shù)據(jù)庫,返回查詢后的結(jié)果6 I 7/while/若不是查詢數(shù)據(jù)庫,不向客戶端輸出信息out.writeU

16、TF(aa 。/線程關(guān)閉out.flush( 。incoming.close(。/trycatch(IOException/endeSystem.out.println(e 。 runclass/publicstaticvoidmain(StringintServerSockets=newargsi=1。tryServerSocket(1111。for( 。newSocketSystem.out.println(connect:ThreadEchoHandler(incoming,i.start( i+catch(ExceptionSystem.out.println(eincoming=s.

17、accept(+ie/客戶端通信小程序import import importjava.applet.* 。StringLineEcho.javaimportpublicclassEchoextendsjava.io.* 。.*。java.awt.* 。AppletTextAreaSocketDataOutputStreamDataInputStreampublicta。echoSocket。ta=newos。is。 init(setBackground(Color.white 。TextArea(5,80。ta.setEditable(false。add(ta。void7 / 7try ec

18、hoSocket=new Socket(1,1111。/與服務(wù)器建立連接catch(IOExcepti oneSystem.out.println(error。public void st(Stri ng stri/ 發(fā)送字符串的 try DataOutputStream os=new DataOutputStream(echoSocket.getOutputStream(。Data In putStreamis=newData In putStream(echoSocket.getl nputStream(。os.writeUTF(+stri。/向服務(wù)器輸送 string

19、os.flush(。 catch(IOExcepti oneSystem.out.println(”error:+e。catch(IOExcepti onSystem.out.pri ntl n(”return7程序調(diào)試心得:1在建立 Socket 連接時(shí),兩端的端口號(hào)必須設(shè)為一致,否則建立不了連接。服務(wù)器 端必須有主機(jī) IP 地址或主機(jī)名參數(shù)2連接建立好之后應(yīng)確定輸入和輸出流。起初程序中用的是DataI nputStream 和 PrintStream,結(jié)果只能傳輸,傳輸中文時(shí)產(chǎn)生亂碼,將PrintStream 改為 DataOutputStream,使用 readUTF(和 writeUTF(方法后,中文傳輸?shù)玫浇鉀Q。3如果一個(gè)使用某端口的程序沒有關(guān)閉,另一個(gè)程序就不能使用這個(gè)端口。4開始進(jìn)行通信的程序均為Application,因不符合客戶機(jī)/服務(wù)器機(jī)制,應(yīng)將客戶端的 Application 改為 Applet。其轉(zhuǎn)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論