版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
課程設(shè)計(jì)報(bào)告2014—2015學(xué)年第一學(xué)期課程名稱計(jì)算機(jī)網(wǎng)絡(luò)設(shè)計(jì)題目即時(shí)通信軟件目錄一、任務(wù)分析與方案設(shè)計(jì)1.任務(wù)分析 22.方案設(shè)計(jì) 2二、開發(fā)環(huán)境與工具 31.設(shè)計(jì)環(huán)境 31.1eclipse開發(fā)平臺(tái)介紹 32.基礎(chǔ)知識(shí) 32.1javaSocket網(wǎng)絡(luò)編程簡(jiǎn)介 32.2套接字的介紹 4三、TCP簡(jiǎn)介及特點(diǎn)原理 51.什么是TCP 52.TCP功能 53.TCP所提供服務(wù)的主要特點(diǎn) 64.TCP支持的服務(wù)器類型 65.TCP的端口號(hào) 66.TCP協(xié)議是如何確保數(shù)據(jù)傳輸高可靠性 77.TCP的服務(wù)流程 7四、關(guān)鍵技術(shù)與理論 91.JAVA編程技術(shù) 92.JavaSocket網(wǎng)絡(luò)編程接口 9五、相關(guān)圖解及程序 101.體系結(jié)構(gòu)設(shè)計(jì) 102.具體功能模塊的分析 11六、測(cè)試及結(jié)果分析 11七、心得體會(huì) 14八、參考文獻(xiàn) 15任務(wù)分析與方案設(shè)計(jì)1.任務(wù)分析計(jì)算機(jī)網(wǎng)絡(luò)被應(yīng)用于我們生活中的方方面面,可以說是網(wǎng)絡(luò)讓我們的生活變得更加美好,更加方便和快捷,我們的生活離不開網(wǎng)絡(luò)基于局域網(wǎng)的即時(shí)通信軟件的核心技術(shù)其實(shí)與基于Internet的即時(shí)通信軟件的設(shè)計(jì)技術(shù)是一樣的,只是規(guī)模比較小?;贗nternet的通信工具一般采用TCP或者UDP協(xié)議來實(shí)現(xiàn)的,開發(fā)技術(shù)已經(jīng)非常成熟,它們不僅實(shí)現(xiàn)了即時(shí)聊天、文件傳輸?shù)裙δ?,而且還能夠?qū)崿F(xiàn)即時(shí)視頻、語(yǔ)音聊天功能等。在局域網(wǎng)內(nèi),這類軟件的設(shè)計(jì)比在Internet中設(shè)計(jì)更為簡(jiǎn)單。因?yàn)镮nternet是網(wǎng)絡(luò)中的網(wǎng)絡(luò),結(jié)構(gòu)更為復(fù)雜,遇到的情況要比在局域網(wǎng)中還要多。所以說局域網(wǎng)的聊天工具的設(shè)計(jì)要相對(duì)簡(jiǎn)單些。而且即時(shí)通信是一個(gè)終端連往一個(gè)即時(shí)通信網(wǎng)絡(luò)的服務(wù)。即時(shí)通信不同于e-mail在于它的交談是實(shí)時(shí)的。大部分的即時(shí)通信服務(wù)提供了presenceawareness的特性--顯示聯(lián)絡(luò)人名單,聯(lián)絡(luò)人是否在線與能否和聯(lián)絡(luò)人交談。2.方案設(shè)計(jì)程序采用JAVA編程,利用java強(qiáng)大的基礎(chǔ)類庫(kù),調(diào)用java中界面開發(fā)的swing和網(wǎng)絡(luò)編程的net函數(shù)群來完成本次的javasocket(網(wǎng)絡(luò)套接字)網(wǎng)絡(luò)即時(shí)通信工具的開發(fā)。在java中,可以把發(fā)送的信息看成是一個(gè)一個(gè)的對(duì)象,當(dāng)我們利用socket鏈接把客戶端和服務(wù)器鏈接起來以后,他們之間就可以以對(duì)象流的形式發(fā)送彼此需要通信的信息了。在java的網(wǎng)絡(luò)編程中,最為核心的就是客戶端和服務(wù)器相互取得socket的鏈接,只要能夠能夠取得鏈接,其他的工作基本上都是java的面向?qū)ο蟮木幊趟枷肴ネ瓿梢恍┚W(wǎng)絡(luò)通訊的業(yè)務(wù)邏輯的處理。二、開發(fā)環(huán)境與工具1.設(shè)計(jì)環(huán)境開發(fā)程序的操作系統(tǒng):Windows7(在WindowsXP、2000里也可以)編譯工具:eclipse程序工程:JAVA工程,Server和Client網(wǎng)絡(luò)環(huán)境:局域網(wǎng)(或互聯(lián)網(wǎng)上運(yùn)用,只要安裝客戶端并且知道服務(wù)器端的IP)eclipse開發(fā)平臺(tái)介紹Eclipe是著名的跨平臺(tái)的自由集成開發(fā)環(huán)境(IDE)。主要用來Java語(yǔ)言開發(fā)。Eclipse的本身只是一個(gè)框架平臺(tái),但是眾多插件的支持,使得Eclipse擁有較佳的靈活性。許多軟件開發(fā)商都以Eclipse為框架開發(fā)自己的IDE。另外由于eclipse是開源的,所以得到了廣大用戶的認(rèn)可。Eclipse也于2001年11月被它的開發(fā)公司IBM公司貢獻(xiàn)給開源社區(qū),現(xiàn)在它由非營(yíng)利軟件供應(yīng)商聯(lián)盟Eclipse基金會(huì)(EclipseFoundation)管理。2.基礎(chǔ)知識(shí)2.1javaSocket網(wǎng)絡(luò)編程簡(jiǎn)介Socket有兩種主要的操作方式:面向連接的和無連接的。面向連接的sockets操作就像一部電話,他們必須建立一個(gè)連接和一人呼叫。所有的事情在到達(dá)時(shí)的順序與它們出發(fā)時(shí)的順序時(shí)一樣。無連接的sockets操作就像是一個(gè)郵件投遞,沒有什么保證,多個(gè)郵件可能在到達(dá)時(shí)的順序與出發(fā)時(shí)的順序不一樣。到底用哪種模式是郵應(yīng)用程序的需要決定的。如果可靠性更重要的話,用面向連接的操作會(huì)好一些.比如文件服務(wù)器需要他們的數(shù)據(jù)的正確性和有序性。如果一些數(shù)據(jù)丟失了,系統(tǒng)的有效性將會(huì)失去。一些服務(wù)器,比如間歇性地發(fā)送一些數(shù)據(jù)塊,如果數(shù)據(jù)丟了的話,服務(wù)器并不想要再重新發(fā)過一次,因?yàn)楫?dāng)數(shù)據(jù)到達(dá)的時(shí)候,它可能已經(jīng)過時(shí)了.確保數(shù)據(jù)的有序性和正確性需要額外的操作的內(nèi)存消耗,額外的費(fèi)用將會(huì)降低系統(tǒng)的回應(yīng)速率。無連接的操作使用數(shù)據(jù)報(bào)協(xié)議。一個(gè)數(shù)據(jù)報(bào)是一個(gè)獨(dú)立的單元,它包含了所有的這次投遞的信息。把它想象成一個(gè)信封吧,它有目的地址和要發(fā)送的內(nèi)容。這個(gè)模式下的socket不需要連接一個(gè)目的的socket,它只是簡(jiǎn)單地投出數(shù)據(jù)報(bào)。無連接的操作是快速的和高效的,但是數(shù)據(jù)安全性不佳。面向連接的操作使用TCP協(xié)議。一個(gè)這個(gè)模式下的socket必須在發(fā)送數(shù)據(jù)之前與目的地的socket取得一個(gè)連接。一旦連接建立了,sockets就可以使用一個(gè)流接口:打開(-讀-寫-關(guān)閉)。所有的發(fā)送的信息都會(huì)在另一端以同樣的順序被接收.面向連接的操作比無連接的操作效率更低,但是數(shù)據(jù)的安全性更高。java降低了建立一個(gè)sockets程序的難度。每一個(gè)傳輸模式都被封裝到了不同的類中。面向連接的類將會(huì)首先被我們討論。到底用哪種模式是郵應(yīng)用程序的需要決定的。如果可靠性更重要的話,用面向連接的操作會(huì)好一些。比如文件服務(wù)器需要他們的數(shù)據(jù)的正確性和有序性。如果一些數(shù)據(jù)丟失了,系統(tǒng)的有效性將會(huì)失去。一些服務(wù)器,比如間歇性地發(fā)送一些數(shù)據(jù)塊,如果數(shù)據(jù)丟了的話,服務(wù)器并不想要再重新發(fā)過一次。因?yàn)楫?dāng)數(shù)據(jù)到達(dá)的候,它可能已經(jīng)過時(shí)了。確保數(shù)據(jù)的有序性和正確性需要額外的操作的內(nèi)存消耗,額外的費(fèi)用將會(huì)降低系統(tǒng)的回應(yīng)速率.2.2套接字的介紹多個(gè)TCP連接或多個(gè)應(yīng)用程序進(jìn)程可能需要通過同一個(gè)TCP協(xié)議端口傳輸數(shù)據(jù)。為了區(qū)別不同的應(yīng)用程序進(jìn)程和連接,許多計(jì)算機(jī)操作系統(tǒng)為應(yīng)用程序與TCP/IP協(xié)議交互提供了稱為套接字(Socket)的接口。套接字,是支持TCP/IP的網(wǎng)絡(luò)通信的基本操作單元,可以看做是不同主機(jī)之間的進(jìn)程進(jìn)行雙向通信的端面點(diǎn),簡(jiǎn)單的說就是通信的兩方的一種約定,用套接字中的相關(guān)函數(shù)來完成通信過程非常非常簡(jiǎn)單的舉例說明下:Socket=Ipaddress+TCP/UDPport.應(yīng)用層通過傳輸層進(jìn)行數(shù)據(jù)通信時(shí),TCP和UDP會(huì)遇到同時(shí)為多個(gè)應(yīng)用程序進(jìn)程提供并發(fā)服務(wù)的問題。2.3TCP/IP協(xié)議簡(jiǎn)介TCP/IP協(xié)議實(shí)際上就是在物理網(wǎng)上的一組完整的網(wǎng)絡(luò)協(xié)議。其中TCP是提供傳輸層服務(wù),而IP則是提供網(wǎng)絡(luò)層服務(wù)。TCP/IP主要包括以下協(xié)議:IP:網(wǎng)間協(xié)議(InternetProtocol),負(fù)責(zé)主機(jī)間數(shù)據(jù)的路由和網(wǎng)絡(luò)上數(shù)據(jù)的存儲(chǔ)。同時(shí)為ICMP,TCP,UDP提供分組發(fā)送服務(wù)。用戶進(jìn)程通常不需要涉及這一層。ICMP:網(wǎng)間報(bào)文控制協(xié)議(InternetControlMessageProtocol)此協(xié)議處理網(wǎng)關(guān)和主機(jī)的差錯(cuò)和傳送控制。TCP:傳輸控制協(xié)議(TransmissionControlProtocol)這是一種提供給用戶進(jìn)程的可靠的全雙工字節(jié)流面向連接的協(xié)議。它要為用戶進(jìn)程提供虛電路服務(wù),并為數(shù)據(jù)可靠傳輸建立檢查。三、TCP簡(jiǎn)介及特點(diǎn)原理1.什么是TCPTCP是一種面向連接(連接導(dǎo)向)的、可靠的、基于字節(jié)流的運(yùn)輸層(Transportlayer)通信協(xié)議。在簡(jiǎn)化的計(jì)算機(jī)網(wǎng)絡(luò)OSI模型中,它完成第四層傳輸層所指定的功能。在因特網(wǎng)協(xié)議族(Internetprotocolsuite)中,TCP層是位于IP層之上,應(yīng)用層之下的中間層。不同主機(jī)的應(yīng)用層之間經(jīng)常需要可靠的、像管道一樣的連接,但是IP層不提供這樣的流機(jī)制,而是提供不可靠的包交換。應(yīng)用層向TCP層發(fā)送用于網(wǎng)間傳輸?shù)摹⒂?位字節(jié)表示的數(shù)據(jù)流,然后TCP把數(shù)據(jù)流分割成適當(dāng)長(zhǎng)度的報(bào)文段(通常受該計(jì)算機(jī)連接的網(wǎng)絡(luò)的數(shù)據(jù)鏈路層的最大傳送單元(MTU)的限制)。之后TCP把結(jié)果包傳給IP層,由它來通過網(wǎng)絡(luò)將包傳送給接收端實(shí)體的TCP層。TCP為了保證不發(fā)生丟包,就給每個(gè)字節(jié)一個(gè)序號(hào),同時(shí)序號(hào)也保證了傳送到接收端實(shí)體的包的按序接收。然后接收端實(shí)體對(duì)已成功收到的字節(jié)發(fā)回一個(gè)相應(yīng)的確認(rèn)(ACK);如果發(fā)送端實(shí)體在合理的往返時(shí)延(RTT)內(nèi)未收到確認(rèn),那么對(duì)應(yīng)的數(shù)據(jù)(假設(shè)丟失了)將會(huì)被重傳。TCP用一個(gè)校驗(yàn)和函數(shù)來檢驗(yàn)數(shù)據(jù)是否有錯(cuò)誤;在發(fā)送和接收時(shí)都要計(jì)算校驗(yàn)和。首先,TCP建立連接之后,通信雙方都同時(shí)可以進(jìn)行數(shù)據(jù)的傳輸,其次,他是全雙工的;在保證可靠性上,采用超時(shí)重傳和捎帶確認(rèn)機(jī)制。在流量控制上,采用滑動(dòng)窗口協(xié)議,協(xié)議中規(guī)定,對(duì)于窗口內(nèi)未經(jīng)確認(rèn)的分組需要重傳。在擁塞控制上,采用慢啟動(dòng)算法。2.TCP功能提供計(jì)算機(jī)程序間連接、檢測(cè)和丟棄重復(fù)的分組、完成數(shù)據(jù)報(bào)的確認(rèn)、流量控制和網(wǎng)絡(luò)擁塞。3.TCP所提供服務(wù)的主要特點(diǎn)(1)面向連接的傳輸;(2)端到端的通信;(3)高可靠性,確保傳輸數(shù)據(jù)的正確性,不出現(xiàn)丟失或亂序;(4)全雙工方式傳輸;(5)采用字節(jié)流方式,即以字節(jié)為單位傳輸字節(jié)序列;(6)緊急數(shù)據(jù)傳送功能。4.TCP支持的服務(wù)器類型不管怎樣,TCP/IP是一個(gè)協(xié)議集。為應(yīng)用提供一些\"低級(jí)\"功能,這些包括IP、TCP、UDP。其它是執(zhí)行特定任務(wù)的應(yīng)用協(xié)議,如計(jì)算機(jī)間傳送文件、發(fā)送電子郵件、或找出誰注冊(cè)到另外一臺(tái)計(jì)算機(jī)。因此,最重要的\"商業(yè)\"TCP/IP服務(wù)有:文件傳送FileTransfer遠(yuǎn)程登錄Remotelogin計(jì)算機(jī)郵件Mail網(wǎng)絡(luò)文件系統(tǒng)(NFS)遠(yuǎn)程打印(Remoteprinting)遠(yuǎn)程執(zhí)行(Remoteexecution)名字服務(wù)器(Nameservers)終端服務(wù)器(Terminalservers)5.TCP的端口號(hào)TCP段結(jié)構(gòu)中端口地址都是16比特,可以有在0~65535范圍內(nèi)的端口號(hào)。對(duì)于這65536個(gè)端口號(hào)有以下的使用規(guī)定:(1)端口號(hào)小于256的定義為常用端口,服務(wù)器一般都是通過常用端口號(hào)來識(shí)別的。任何TCP/IP實(shí)現(xiàn)所提供的服務(wù)都用1~1023之間的端口號(hào),是由IANA來管理的;(2)客戶端只需保證該端口號(hào)在本機(jī)上是惟一的就可以了。客戶端口號(hào)因存在時(shí)間很短暫又稱臨時(shí)端口號(hào);(3)大多數(shù)TCP/IP實(shí)現(xiàn)給臨時(shí)端口號(hào)分配1024~5000之間的端口號(hào)。大于5000的端口號(hào)是為其他服務(wù)器預(yù)留的。6.TCP協(xié)議是如何確保數(shù)據(jù)傳輸高可靠性
為了保證可靠性,發(fā)送的報(bào)文都有遞增的序列號(hào)。序列號(hào)和確認(rèn)號(hào)用來確保傳輸?shù)目煽啃?。此外,?duì)每個(gè)報(bào)文都設(shè)立一個(gè)定時(shí)器,設(shè)定一個(gè)最大時(shí)延。對(duì)那些超過最大時(shí)延仍沒有收到確認(rèn)信息的報(bào)文就認(rèn)為已經(jīng)丟失,需要重傳。7.TCP的服務(wù)流程TCP協(xié)議提供的是可靠的、面向連接的傳輸控制協(xié)議,即在傳輸數(shù)據(jù)前要先建立邏輯連接,然后再傳輸數(shù)據(jù),最后釋放連接3個(gè)過程。TCP提供端到端、全雙工通信;采用字節(jié)流方式,如果字節(jié)流太長(zhǎng),將其分段;提供緊急數(shù)據(jù)傳送功能。盡管TCP和UDP都使用相同的網(wǎng)絡(luò)層(IP),TCP卻向應(yīng)用層提供與UDP完全不同的服務(wù)。TCP提供一種面向連接的、可靠的字節(jié)流服務(wù)。面向連接意味著兩個(gè)使用TCP的應(yīng)用(通常是一個(gè)客戶和一個(gè)服務(wù)器)在彼此交換數(shù)據(jù)之前必須先建立一個(gè)TCP連接。這一過程與打電話很相似,先撥號(hào)振鈴,等待對(duì)方摘機(jī)說“喂”,然后才說明是誰。在一個(gè)TCP連接中,僅有兩方進(jìn)行彼此通信。廣播和多播不能用于TCP。TCP通過下列方式來提供可靠性:?應(yīng)用數(shù)據(jù)被分割成TCP認(rèn)為最適合發(fā)送的數(shù)據(jù)塊。這和UDP完全不同,應(yīng)用程序產(chǎn)生的數(shù)據(jù)報(bào)長(zhǎng)度將保持不變。由TCP傳遞給IP的信息單位稱為報(bào)文段或段(segment)TCP如何確定報(bào)文段的長(zhǎng)度。?當(dāng)TCP發(fā)出一個(gè)段后,它啟動(dòng)一個(gè)定時(shí)器,等待目的端確認(rèn)收到這個(gè)報(bào)文段。如果不能及時(shí)收到一個(gè)確認(rèn),將重發(fā)這個(gè)報(bào)文段。?當(dāng)TCP收到發(fā)自TCP連接另一端的數(shù)據(jù),它將發(fā)送一個(gè)確認(rèn)。這個(gè)確認(rèn)不是立即發(fā)送,通常將推遲幾分之一秒?TCP將保持它首部和數(shù)據(jù)的檢驗(yàn)和。這是一個(gè)端到端的檢驗(yàn)和,目的是檢測(cè)數(shù)據(jù)在傳輸過程中的任何變化。如果收到段的檢驗(yàn)和有差錯(cuò),TCP將丟棄這個(gè)報(bào)文段和不確認(rèn)收到此報(bào)文段(希望發(fā)端超時(shí)并重發(fā))。?既然TCP報(bào)文段作為IP數(shù)據(jù)報(bào)來傳輸,而IP數(shù)據(jù)報(bào)的到達(dá)可能會(huì)失序,因此TCP報(bào)文段的到達(dá)也可能會(huì)失序。如果必要,TCP將對(duì)收到的數(shù)據(jù)進(jìn)行重新排序,將收到的數(shù)據(jù)以正確的順序交給應(yīng)用層。?既然IP數(shù)據(jù)報(bào)會(huì)發(fā)生重復(fù),TCP的接收端必須丟棄重復(fù)的數(shù)據(jù)。?TCP還能提供流量控制。TCP連接的每一方都有固定大小的緩沖空間。TCP的接收端只允許另一端發(fā)送接收端緩沖區(qū)所能接納的數(shù)據(jù)。這將防止較快主機(jī)致使較慢主機(jī)的緩沖區(qū)溢出。兩個(gè)應(yīng)用程序通過TCP連接交換8bit字節(jié)構(gòu)成的字節(jié)流。TCP不在字節(jié)流中插入記錄標(biāo)識(shí)符。我們將這稱為字節(jié)流服務(wù)(bytestreamservice)。如果一方的應(yīng)用程序先傳10字節(jié),又傳20字節(jié),再傳50字節(jié),連接的另一方將無法了解發(fā)方每次發(fā)送了多少字節(jié)。收方可以分4次接收這80個(gè)字節(jié),每次接收20字節(jié)。一端將字節(jié)流放到TCP連接上,同樣的字節(jié)流將出現(xiàn)在TCP連接的另一端。另外,TCP對(duì)字節(jié)流的內(nèi)容不作任何解釋。TCP不知道傳輸?shù)臄?shù)據(jù)字節(jié)流是二進(jìn)制數(shù)據(jù),還是ASCII字符、EBCDIC字符或者其他類型數(shù)據(jù)。對(duì)字節(jié)流的解釋由TCP連接雙方的應(yīng)用層解釋。這種對(duì)字節(jié)流的處理方式與Unix操作系統(tǒng)對(duì)文件的處理方式很相似。Unix的內(nèi)核對(duì)一個(gè)應(yīng)用讀或?qū)懙膬?nèi)容不作任何解釋,而是交給應(yīng)用程序處理。對(duì)Unix的內(nèi)核來說,它無法區(qū)分一個(gè)二進(jìn)制文件與一個(gè)文本文件。TCP是因特網(wǎng)中的傳輸層協(xié)議,使用三次握手協(xié)議建立連接。當(dāng)主動(dòng)方發(fā)出SYN連接請(qǐng)求后,等待對(duì)方回答SYN,ACK。這種建立連接的方法可以防止產(chǎn)生錯(cuò)誤的連接,TCP使用的流量控制協(xié)議是可變大小的滑動(dòng)窗口協(xié)議。第一次握手:建立連接時(shí),客戶端發(fā)送SYN包(SEQ=x)到服務(wù)器,并進(jìn)入SYN_SEND狀態(tài),等待服務(wù)器確認(rèn)。第二次握手:服務(wù)器收到SYN包,必須確認(rèn)客戶的SYN(ACK=x+1),同時(shí)自己也送一個(gè)SYN包(SEQ=y),即SYN+ACK包,此時(shí)服務(wù)器進(jìn)入SYN_RECV狀態(tài)。第三次握手:客戶端收到服務(wù)器的SYN+ACK包,向服務(wù)器發(fā)送確認(rèn)包ACK(ACK=y+1),此包發(fā)送完畢,客戶端和服務(wù)器時(shí)入Established狀態(tài),完成三次握手。四、關(guān)鍵技術(shù)與理論1.JAVA編程技術(shù)Java是Sun公司推出的一種編程語(yǔ)言。它是一種通過解釋方式來執(zhí)行的語(yǔ)言,語(yǔ)法規(guī)則和C++類似。同時(shí),Java也是一種跨平臺(tái)的程序設(shè)計(jì)語(yǔ)言。用Java語(yǔ)言編寫的程序叫做“Applet”(小應(yīng)用程序),用編譯器將它編譯成類文件后,將它存在WWW頁(yè)面中,并在HTML檔上作好相應(yīng)標(biāo)記,用戶端只要裝上Java的客戶軟件就可以在網(wǎng)上直接運(yùn)行“Applet”。Java非常適合于企業(yè)網(wǎng)絡(luò)和Internet環(huán)境,現(xiàn)在已成為Internet中最受歡迎、最有影響的編程語(yǔ)言之一。Java有許多值得稱道的優(yōu)點(diǎn),如簡(jiǎn)單、面向?qū)ο?、分布式、解釋性、可靠、安全、結(jié)構(gòu)2.JavaSocket網(wǎng)絡(luò)編程接口事實(shí)上網(wǎng)絡(luò)編程,簡(jiǎn)單的理解就是兩臺(tái)計(jì)算機(jī)相互通訊數(shù)據(jù)而已。對(duì)于程序員而言,去掌握一種編程接口并使用一種編程模型相對(duì)就會(huì)顯得簡(jiǎn)單的多了。Javasdk提供一些相對(duì)簡(jiǎn)單的api來完成這些工作,socket就是其中之一。對(duì)于java而言,這些api存在于這個(gè)包里面。因此,只要導(dǎo)入這個(gè)包就可以準(zhǔn)備網(wǎng)絡(luò)編程了。網(wǎng)絡(luò)編程的基本模型就是客戶機(jī)到服務(wù)器模型。簡(jiǎn)單的說,就是兩個(gè)進(jìn)程之間相互通訊,然后其中一個(gè)必須提供一個(gè)固定的位置,而另一個(gè)則只需要知道這個(gè)固定的位置,并去建立兩者之間的聯(lián)系。然后完成數(shù)據(jù)的通訊就可以了。這里提供固定位置的通常稱為服務(wù)器,而建立聯(lián)系的通常叫做客戶端。基于這個(gè)簡(jiǎn)單的模型,就可以進(jìn)入網(wǎng)絡(luò)編程.對(duì)于java而言已經(jīng)簡(jiǎn)化了socket的編程接口。首先需要確定有關(guān)提供固定位置的服務(wù)方是如何建立的。java提供了serversocket來對(duì)其進(jìn)行支持。事實(shí)上當(dāng)創(chuàng)建該類的一個(gè)實(shí)力對(duì)象并提供一個(gè)端口資源,就建立了一個(gè)固定位置可以讓其他計(jì)算機(jī)來訪問。serversocketserver=newserversocket(6789);這里稍微要注意的是端口的分配必須是唯一的。因?yàn)槎丝谑菫榱宋ㄒ粯?biāo)識(shí)每臺(tái)計(jì)算機(jī)唯一服務(wù)的。另外端口號(hào)是從0~65535之間的,前1024個(gè)端口已經(jīng)被tcp/ip作為保留端口,因此,分配的端口只能是1024個(gè)之后的。有了固定位置,現(xiàn)在所需要的就是一根連接線了。該連接線由客戶方首先提出要求。因此java同樣提供了一個(gè)socket對(duì)象來對(duì)其進(jìn)行支持。只要客戶方創(chuàng)建一個(gè)socket的實(shí)例對(duì)象進(jìn)行支持就可以了。socketclient=newsocket(inetaddress.getlocalhost(),5678);客戶機(jī)必須知道有關(guān)服務(wù)器的ip地址。對(duì)于這一點(diǎn),java也提供了一個(gè)相關(guān)的類inetaddress。該對(duì)象的實(shí)例必須通過它的靜態(tài)方法來提供。它的靜態(tài)方法主要提供了得到本機(jī)ip和通過名字或ip直接得到inetaddress的方法。i/o操作總是和網(wǎng)絡(luò)編程息息相關(guān)的。因?yàn)榈讓拥木W(wǎng)絡(luò)是繼續(xù)數(shù)據(jù)的。除非遠(yuǎn)程調(diào)用,處理問題的核心在執(zhí)行上。否則,數(shù)據(jù)的交互還是依賴于io操作的。所以,你也必須導(dǎo)入java.io這個(gè)包。java的io操作也不復(fù)雜。它提供了針對(duì)于字節(jié)流和unicode的讀者和寫者,然后也提供了一個(gè)緩沖用于數(shù)據(jù)的讀寫。bufferedreaderin=newbufferedreader(newinputstreamreader(server.getinputstream()));printwriterout=newprintwriter(server.getoutputstream());上面兩句就是建立緩沖并把原始的字節(jié)流轉(zhuǎn)變?yōu)閡nicode可以操作。而原始的字節(jié)流來源于socket的兩個(gè)方法,getinputstream()和getoutputstream()方法,分別用來得到輸入和輸出。五、相關(guān)圖解及程序1.體系結(jié)構(gòu)設(shè)計(jì)一般的通信工具,都采用客戶端/服務(wù)器體系結(jié)構(gòu)。客戶端/服務(wù)器的結(jié)構(gòu)包含:客戶端和服務(wù)端。客戶端訪問和處理服務(wù)器上的數(shù)據(jù),服務(wù)器接收和處理客戶端的數(shù)據(jù)請(qǐng)求。這種模式的好處就是可以將一個(gè)系統(tǒng)分為兩個(gè)獨(dú)立的部分進(jìn)行開發(fā)設(shè)計(jì),便于軟件開發(fā)。而且也把一個(gè)軟件的功能交給兩個(gè)部分去完成,則更加有效的利用了系統(tǒng)資源。本程序中也采用了簡(jiǎn)單的客戶端/服務(wù)器模式。由于本程序比較簡(jiǎn)單,僅演示客戶端與服務(wù)端進(jìn)行通信。2.具體功能模塊的分析由于該系統(tǒng)采用C/S模式,所以對(duì)功能模塊進(jìn)行劃分時(shí),就需要分服務(wù)器和客戶端兩部分進(jìn)行。由于服務(wù)器的主要功能是等待接收并反饋客戶端的信息,所以服務(wù)器需
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 冷庫(kù)儲(chǔ)存合同范例
- 小區(qū)商鋪簽約合同范例
- 廚師薪酬合同范例
- 山地綠化養(yǎng)護(hù)合同范例
- 2024年清遠(yuǎn)道路旅客運(yùn)輸駕駛員從業(yè)資格模擬試題
- 2024年杭州客運(yùn)資格證急救試題答案
- 2024年浙江c1道路客運(yùn)輸從業(yè)資格證怎么考
- 2024年烏魯木齊從業(yè)資格證模擬考試0題
- 《橢圓的標(biāo)準(zhǔn)方程》教案
- 2013液壓與氣壓傳動(dòng)考試題及答案2套
- 成長(zhǎng)生涯發(fā)展展示
- T-ZJFS 010-2024 銀行業(yè)金融機(jī)構(gòu)轉(zhuǎn)型貸款實(shí)施規(guī)范
- 六年級(jí)數(shù)學(xué)課件-圓的面積【全國(guó)一等獎(jiǎng)】
- 食管炎的護(hù)理查房
- 老年人的火災(zāi)預(yù)防與自救技巧課件
- 新時(shí)代魯班精神
- 《教育的初心》讀書分享
- 軟件工程生涯發(fā)展展示
- 檢驗(yàn)檢測(cè)機(jī)構(gòu)質(zhì)量管理
- 基于PLC的熱水箱恒溫控制系統(tǒng)
- 醫(yī)療機(jī)構(gòu)校驗(yàn)管理課件
評(píng)論
0/150
提交評(píng)論