




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、引言Java語言是第一個完全融入網(wǎng)絡(luò)的語言,它之所以適合編寫網(wǎng)絡(luò)應(yīng)用程序,歸功于它的以下優(yōu)勢。(1)Java語言與生俱來就是與平臺無關(guān)的。Java程序能夠運行在不同的平臺上,運行在不同平臺上的Java程序能夠方便地進(jìn)行網(wǎng)絡(luò)通信。(2)Java語言具有完善的安全機(jī)制,可以對程序進(jìn)行權(quán)限檢查,這對網(wǎng)絡(luò)程序至關(guān)重要。(3)JDK類庫提供了豐富的網(wǎng)絡(luò)類庫,如套接字API、JavaMail API和JDBC API等,大大簡化了網(wǎng)絡(luò)程序的開發(fā)過程。1本單元主要內(nèi)容1.Java網(wǎng)絡(luò)編程入門2.Socket用法詳解3. ServerSocket用法詳解 4.非阻塞通信5.創(chuàng)建非阻塞的HTTP服務(wù)器6.基于U
2、DP的數(shù)據(jù)報和套接字7.對象的序列化與反序列化2Java網(wǎng)絡(luò)編程入門1.1 進(jìn)程之間的通信1.2 計算機(jī)網(wǎng)絡(luò)的概念1.3 OSI參考模型1.4 TCP/IP參考模型和TCP/IP協(xié)議1.5 用Java編寫客戶/服務(wù)器程序客戶程序服務(wù)器程序計算機(jī)網(wǎng)絡(luò)3Java網(wǎng)絡(luò)編程入門進(jìn)程之間通信客戶機(jī)和遠(yuǎn)程服務(wù)器是通過網(wǎng)絡(luò)連接的兩臺主機(jī)??蛻魴C(jī)上運行EchoCl客ient進(jìn)程,遠(yuǎn)程服務(wù)器上運行EchoServer進(jìn)程。兩臺機(jī)器只需關(guān)注它們通信的具體內(nèi)容,例如EchoClient發(fā)送信息“hello”,那么EchoServer返回信息“echo:hello”。EchoClient和EchoServer都無需考
3、慮如何把信息傳輸給對方。傳輸信息的任務(wù)是由計算機(jī)網(wǎng)絡(luò)來完成的。(再如圖片傳送.)兩個進(jìn)程順利通信的前提條件是它們所在的主機(jī)都連接到了計算機(jī)網(wǎng)絡(luò)上。4Java網(wǎng)絡(luò)編程入門計算機(jī)網(wǎng)絡(luò)通俗的說,計算機(jī)網(wǎng)絡(luò)就是通過電纜、電話線、或無線通訊設(shè)施等互聯(lián)的計算機(jī)的集合。網(wǎng)絡(luò)中每臺機(jī)器稱為節(jié)點(node)。大多數(shù)節(jié)點是計算機(jī),此外,打印機(jī)、路由器、網(wǎng)橋、網(wǎng)關(guān)和啞終端等也是節(jié)點。5Java網(wǎng)絡(luò)編程入門計算機(jī)網(wǎng)絡(luò)不同網(wǎng)絡(luò)之間的互聯(lián)靠網(wǎng)絡(luò)上的標(biāo)準(zhǔn)語言TCP/IP協(xié)議。如上圖所示,一個網(wǎng)絡(luò)使用協(xié)議A,另一個網(wǎng)絡(luò)使用協(xié)議B,這兩個網(wǎng)絡(luò)通過TCP/IP協(xié)議進(jìn)行互聯(lián)。6Java網(wǎng)絡(luò)編程入門TCP/IP參考模型TCP/IP協(xié)
4、議確切地說應(yīng)該是:TCP/IP協(xié)議集,對應(yīng)TCP/IP參考模型的每一層次都有一個協(xié)議。而TCP協(xié)議和IP協(xié)議是該協(xié)議集中最核心的兩個協(xié)議。比較TCP/IP 參考模型和OSI參考模型、HTTPTCP、UDPIP以太網(wǎng):IEEE802.3令牌環(huán)網(wǎng):IEEE802.47Java網(wǎng)絡(luò)編程入門TCP/IP參考模型(1)主機(jī)-網(wǎng)絡(luò)層 實際上TCP/IP 參考模型沒有真正提供這一層的實現(xiàn),也沒有提供協(xié)議。它只是要求第三方實現(xiàn)的主機(jī)-網(wǎng)絡(luò)層能夠為上層網(wǎng)絡(luò)互聯(lián)層提供一個訪問接口,使得網(wǎng)絡(luò)互聯(lián)層能利用主機(jī)-網(wǎng)絡(luò)層來傳遞IP數(shù)據(jù)包。(2)網(wǎng)絡(luò)互聯(lián)層網(wǎng)絡(luò)互聯(lián)層是整個參考模型的核心。它的功能是把IP 數(shù)據(jù)包發(fā)送到目標(biāo)主
5、機(jī)。為了盡快地發(fā)送數(shù)據(jù),IP 協(xié)議把原始數(shù)據(jù)分為多個數(shù)據(jù)包,然后沿不同的路徑同時傳遞數(shù)據(jù)包。8Java網(wǎng)絡(luò)編程入門TCP/IP參考模型(3)傳輸層傳輸層的功能是使源主機(jī)和目標(biāo)主機(jī)上的進(jìn)程可以進(jìn)行會話。在傳輸層定義了兩種服務(wù)質(zhì)量不同的協(xié)議,即TCP(Transmission Control Protocol,傳輸控制協(xié)議)和UDP(UserDatagram Protocol,用戶數(shù)據(jù)報協(xié)議)。TCP 協(xié)議是一種面向連接的、可靠的協(xié)議。它將源主機(jī)發(fā)出的字節(jié)流無差錯的發(fā)送給互聯(lián)網(wǎng)上的目標(biāo)主機(jī)。應(yīng)用層的許多協(xié)議,如HTTP、FTP 和TELNET 協(xié)議等都建立在TCP協(xié)議基礎(chǔ)上。UDP 協(xié)議是一個不可
6、靠的、無連接協(xié)議,主要適用于不需要對報文進(jìn)行排序和流量控制的場合。UDP 不能保證數(shù)據(jù)報的接收順序同發(fā)送順序相同,甚至不能保證它們是否全部到達(dá)目標(biāo)主機(jī)。應(yīng)用層的一些協(xié)議,如SNMP 和DNS 協(xié)議就建立在UDP 協(xié)議基礎(chǔ)上。如果要求可靠的傳輸數(shù)據(jù),則應(yīng)該避免使用UDP協(xié)議,而要使用TCP協(xié)議。(如視頻聊天)9Java網(wǎng)絡(luò)編程入門TCP/IP參考模型(4)應(yīng)用層 TCP/IP 模型將OSI 參考模型中的會話層和表示層的功能合并到應(yīng)用層實現(xiàn)。針對各種各樣的網(wǎng)絡(luò)應(yīng)用,應(yīng)用層引入了許多協(xié)議。 基于UDP協(xié)議的的應(yīng)用層協(xié)議主要包括:SNMP(網(wǎng)絡(luò)管理協(xié)議)、DNS 基于TCP協(xié)議的應(yīng)用層協(xié)議主要包括:F
7、TP、TELNET(虛擬終端協(xié)議)、HTTP、HTTPS(安全超文本傳輸協(xié)議)、POP3(郵局協(xié)議-版本3)、IMAP4(Internet消息訪問協(xié)議-版本4)、SMTP10Java網(wǎng)絡(luò)編程入門IP協(xié)議IP 網(wǎng)絡(luò)(即在網(wǎng)絡(luò)層采用IP 協(xié)議的網(wǎng))中每臺主機(jī)都有惟一的32位IP 地址。主機(jī)實際上有兩個不同性質(zhì)的地址:物理地址和IP 地址。物理地址是由主機(jī)上的網(wǎng)卡來標(biāo)識的,物理地址才是主機(jī)的真實地址。IP 是面向包的協(xié)議,即數(shù)據(jù)被分成若干小數(shù)據(jù)包,然后分別傳輸它們。IP 網(wǎng)絡(luò)上的主機(jī)只能直接向本地網(wǎng)上的其他主機(jī)(也就是具有相同IP 網(wǎng)址的主機(jī))發(fā)送數(shù)據(jù)包。11Java網(wǎng)絡(luò)編程入門IP協(xié)議如下圖所示,
8、主機(jī)A向同一個網(wǎng)絡(luò)上的另一個主機(jī)B 發(fā)包時, ARP會通過地址解析協(xié)議,獲得對方的物理地址,然后把包發(fā)給對方。 ARP 協(xié)議的運行機(jī)制為:主機(jī)A 在網(wǎng)絡(luò)上廣播一個ARP 消息:“要尋找地址為 的主機(jī)”,接著,具有這個IP 地址的主機(jī)B 就會做出響應(yīng),把自身的物理地址告訴主機(jī)A。12Java網(wǎng)絡(luò)編程入門IP協(xié)議當(dāng)主機(jī)A 向另一個網(wǎng)絡(luò)上的主機(jī)B 發(fā)送包時,主機(jī)A 利用ARP 協(xié)議找到本地網(wǎng)絡(luò)上的路由器的物理地址,把包轉(zhuǎn)發(fā)給它。路由器會按照如下步驟處理數(shù)據(jù)包:(1)如果數(shù)據(jù)包的生命周期已到,則該數(shù)據(jù)包被拋棄。(2)搜索路由表,優(yōu)先搜索路由表中的主機(jī),如果能找到具有目標(biāo)IP地址的主機(jī),則將數(shù)據(jù)包發(fā)送給
9、該主機(jī)。(3)如果匹配主機(jī)失敗,則繼續(xù)搜索路由表,匹配同子網(wǎng)的路由器,如果找到匹配的路由器,則將數(shù)據(jù)包轉(zhuǎn)發(fā)給該路由器。(4)如果匹配同子網(wǎng)的路有器失敗,則繼續(xù)搜索路由表,匹配同網(wǎng)絡(luò)的路由器,如果找到匹配的路由器,則將數(shù)據(jù)包轉(zhuǎn)發(fā)給該路由器。(5)如果以上匹配操作都失敗,就搜索默認(rèn)路由,如果默認(rèn)路由存在,則按照默認(rèn)路由發(fā)送數(shù)據(jù)包,否則丟棄數(shù)據(jù)包。IP 協(xié)議并不保證一定把數(shù)據(jù)包送達(dá)目標(biāo)主機(jī),在發(fā)送過程中,會因為數(shù)據(jù)包結(jié)束生命周期,或者找不到路由而丟棄數(shù)據(jù)包。13Java網(wǎng)絡(luò)編程入門TCP協(xié)議IP協(xié)議在發(fā)送數(shù)據(jù)包時,途中會遇到各種事情,例如可能路由器突然崩潰,使包丟失。再例如一個包可能沿低速鏈路移動,
10、而另一個包可能沿高速鏈路移動而超過前面的包,最后使得包的順序搞亂。TCP 協(xié)議使兩臺主機(jī)上的進(jìn)程順利通信,不必?fù)?dān)心包丟失或包順序搞亂。TCP 跟蹤包順序,并且在包順序搞亂時按正確順序重組包。如果包丟失,則TCP會請求源主機(jī)重發(fā)包。14Java網(wǎng)絡(luò)編程入門TCP協(xié)議端口號的范圍為0 到65535,其中0 到1023 的端口號一般固定分配給一些服務(wù)。比如 FTP服務(wù)(21),SMTP(25)服務(wù),HTTP(25)服務(wù),135端口分配給RPC(遠(yuǎn)程過程調(diào)用)服務(wù)等等;從1024到65535的端口號供用戶自定義的服務(wù)使用。15Java網(wǎng)絡(luò)編程入門TCP協(xié)議客戶進(jìn)程的端口一般由所在主機(jī)的操作系統(tǒng)動態(tài)分配
11、,當(dāng)客戶進(jìn)程要求與一個服務(wù)器進(jìn)程進(jìn)行TCP 連接,操作系統(tǒng)為客戶進(jìn)程隨機(jī)的分配一個還未被占用的端口,當(dāng)客戶進(jìn)程與服務(wù)器進(jìn)程斷開連接,這個端口就被釋放。TCP 和UDP 都用端口來標(biāo)識進(jìn)程,允許存在取值相同的TCP端口與UDP端口。16Java網(wǎng)絡(luò)編程入門客戶/服務(wù)器通信模式網(wǎng)絡(luò)上有些通用的服務(wù)有著固定的端口17Java網(wǎng)絡(luò)編程入門客戶/服務(wù)器通信模式在Java中,有三種套接字類:.Socket、.ServerSocket和DatagramSocket。其中Socket和ServerSocket類建立在TCP協(xié)議基礎(chǔ)上,DatagramSocket 類建立在UDP協(xié)議基礎(chǔ)上。傳輸層向應(yīng)用層提供了
12、套接字Socket 接口,Socket 封裝了下層的數(shù)據(jù)傳輸細(xì)節(jié),應(yīng)用層的程序通過Socket來建立與遠(yuǎn)程主機(jī)的連接以及進(jìn)行數(shù)據(jù)傳輸。圖1-18 套接字可看過是通信連接兩端的收發(fā)器18Java網(wǎng)絡(luò)編程入門客戶/服務(wù)器通信模式圖1-19 服務(wù)器與客戶利用ServerSocket 和Socket來通信19編寫服務(wù)器端程序和客戶端程序,要求實現(xiàn)如下功能:客戶端循環(huán)從控制臺輸入字符串,服務(wù)器端程序接收到數(shù)據(jù)后會在字符串前加上echo: ,返回給客戶端。當(dāng)客戶端輸入“bye”時,客戶端程序退出。編程時,注意程序代碼的規(guī)范性、模塊化。注意多使用斷點調(diào)試功能體會程序運行結(jié)果。Java網(wǎng)絡(luò)編程入門TCP Socket編程實例20InputStre
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 可行性研究合同范本
- 甘肅土地流轉(zhuǎn)合同范本
- 化肥農(nóng)藥購買合同范本
- 一般租賃合同范本
- 冷柜租賃合同范本
- 寫農(nóng)業(yè)合作社合同范本
- 名宿托管簽約合同范本
- 做微商城合同范本
- 供用熱合同范本
- 酒店轉(zhuǎn)讓經(jīng)營合同范本
- 血透病人皮膚瘙癢課件
- 2025年度船舶焊接維修工程合同范本資料下載
- 貴州茅臺課程設(shè)計
- 工業(yè)攝像頭知識培訓(xùn)課件
- 2024-2025學(xué)年六年級數(shù)學(xué)人教版上冊寒假作業(yè)(綜合基礎(chǔ)復(fù)習(xí)篇含答案)
- DB33T 1134-2017 靜鉆根植樁基礎(chǔ)技術(shù)規(guī)程
- 樓梯塑料滴水線施工方案
- 《用電檢查與稽查》課件
- 心理健康主題班會課件73
- 2024.8.1十七個崗位安全操作規(guī)程手冊(值得借鑒)
- 缺血性心臟病麻醉
評論
0/150
提交評論