版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
javaSE什么是網(wǎng)絡(luò)編程網(wǎng)絡(luò)編程就是在兩個(gè)或兩個(gè)以上的設(shè)備(例如計(jì)算機(jī))之間傳輸數(shù)據(jù)。程序員所作的事情就是把數(shù)據(jù)發(fā)送到指定的位置,或者接收到指定的數(shù)據(jù),這個(gè)就是狹義的網(wǎng)絡(luò)編程范疇。在發(fā)送和接收數(shù)據(jù)時(shí),大部分的程序設(shè)計(jì)語(yǔ)言都設(shè)計(jì)了專門的API實(shí)現(xiàn)這些功能,程序員只需要調(diào)用即可。對(duì)于網(wǎng)絡(luò)編程來(lái)說(shuō),最主要的是計(jì)算機(jī)和計(jì)算機(jī)之間的通信,這樣首要的問(wèn)題就是如何找到網(wǎng)絡(luò)上的計(jì)算機(jī)呢?這就需要了解IP地址的概念。為了能夠方便的識(shí)別網(wǎng)絡(luò)上的每個(gè)設(shè)備,網(wǎng)絡(luò)中的每個(gè)設(shè)備都會(huì)有一個(gè)唯一的數(shù)字標(biāo)識(shí),這個(gè)就是IP地址。在計(jì)算機(jī)網(wǎng)絡(luò)中,現(xiàn)在命名IP地址的規(guī)定是IPv4協(xié)議,該協(xié)議規(guī)定每個(gè)IP地址由4個(gè)0-255之間的數(shù)字組成,例如4。每個(gè)接入網(wǎng)絡(luò)的計(jì)算機(jī)都擁有唯一的IP地址,這個(gè)IP地址可能是固定的,例如網(wǎng)絡(luò)上各種各樣的服務(wù)器,也可以是動(dòng)態(tài)的,例如使用ADSL撥號(hào)上網(wǎng)的寬帶用戶,無(wú)論以何種方式獲得或是否是固定的,每個(gè)計(jì)算機(jī)在聯(lián)網(wǎng)以后都擁有一個(gè)唯一的合法IP地址,就像每個(gè)手機(jī)號(hào)碼一樣。網(wǎng)絡(luò)通訊網(wǎng)絡(luò)通訊基于“請(qǐng)求-響應(yīng)”模型。為了理解這個(gè)模型,先來(lái)看一個(gè)例子,經(jīng)??措娨暤娜丝隙ㄒ?jiàn)過(guò)審訊的場(chǎng)面吧,一般是這樣的:警察:姓名嫌疑犯:XXX警察:性別嫌疑犯:男警察:年齡嫌疑犯:29……在這個(gè)例子中,警察問(wèn)一句,嫌疑犯回答一句,如果警察不問(wèn),則嫌疑犯保持沉默。這種一問(wèn)一答的形式就是網(wǎng)絡(luò)中的“請(qǐng)求-響應(yīng)”模型。也就是通訊的一端發(fā)送數(shù)據(jù),另外一端反饋數(shù)據(jù),網(wǎng)絡(luò)通訊都基于該模型。網(wǎng)絡(luò)通訊方式在現(xiàn)有的網(wǎng)絡(luò)中,網(wǎng)絡(luò)通訊的方式主要有兩種:1、TCP(傳輸控制協(xié)議)方式2、UDP(用戶數(shù)據(jù)報(bào)協(xié)議)方式TCP/IP概述TCP/IP模型有四層結(jié)構(gòu)應(yīng)用層(ApplicationLayer)傳輸層(TransportLayer)網(wǎng)絡(luò)層(InternetLayer)鏈路層(LinkLayer)應(yīng)用層
應(yīng)用層為用戶提供所需要的各種服務(wù),負(fù)責(zé)傳送各種最終形態(tài)的數(shù)據(jù),是直接與用戶打交道的層,典型協(xié)議包含HTTP、FTP等。應(yīng)用層(ApplicationLayer)傳輸層
傳輸層為應(yīng)用層實(shí)體提供端到端的通信功能,該層定義了兩個(gè)主要的協(xié)議:傳輸控制協(xié)議(TCP)和用戶數(shù)據(jù)報(bào)協(xié)議(UDP)。其中,TCP協(xié)議提供的是一種可靠的、面向連接的數(shù)據(jù)傳輸服務(wù);而UDP協(xié)議提供的是不可靠的、無(wú)連接的數(shù)據(jù)傳輸服務(wù)。
傳輸層(TransportLayer)網(wǎng)絡(luò)層
網(wǎng)絡(luò)層主要解決主機(jī)到主機(jī)的通信問(wèn)題。該層有四個(gè)主要協(xié)議:網(wǎng)絡(luò)協(xié)議(IP)、地址解析協(xié)議(ARP)、互聯(lián)網(wǎng)組管理協(xié)議(IGMP)和互聯(lián)網(wǎng)控制報(bào)文協(xié)議(ICMP)。其中,IP協(xié)議是網(wǎng)絡(luò)層最重要的協(xié)議。
網(wǎng)絡(luò)層(InternetLayer)鏈路層
鏈路層負(fù)責(zé)建立電路連接,是整個(gè)網(wǎng)絡(luò)的物理基礎(chǔ),典型的協(xié)議包括以太網(wǎng)、ADSL等。鏈路層(LinkLayer)TCP/IP概述進(jìn)行網(wǎng)絡(luò)編程主要需要解決兩個(gè)問(wèn)題
如何在網(wǎng)絡(luò)中找到一臺(tái)或多臺(tái)主機(jī):
可以依靠網(wǎng)絡(luò)層的IP解決,即提供主機(jī)的IP地址找到主機(jī)。當(dāng)通信雙方成功連接后,如何進(jìn)行可靠的數(shù)據(jù)傳輸:
針對(duì)傳輸層進(jìn)行編程,傳輸層主要的兩個(gè)協(xié)議是TCP和UDP。TCP、UDPTCP(TranferControlProtocol)面向連接的,可靠的傳輸協(xié)議UDP(UserDatagramProtocol)
無(wú)連接的,不可靠的傳輸協(xié)議TCP、UDP1.TCP:通過(guò)TCP傳輸,得到的是一個(gè)順序的無(wú)差錯(cuò)的數(shù)據(jù)流。TCP在網(wǎng)絡(luò)通信上有極強(qiáng)的生命力,如遠(yuǎn)程連接(Telnet)和文件傳輸(FTP)都需要不定長(zhǎng)度的數(shù)據(jù)被可靠地傳輸。但是可靠的傳輸是要付出代價(jià)的,對(duì)數(shù)據(jù)內(nèi)容正確性的檢驗(yàn)必然占用計(jì)算機(jī)的處理時(shí)間和網(wǎng)絡(luò)的帶寬,因此TCP傳輸?shù)男什蝗鏤DP高。2.UDP:每個(gè)數(shù)據(jù)報(bào)都是一個(gè)獨(dú)立的信息,包括完整的源地址或目的地址,它在網(wǎng)絡(luò)上以任何可能的路徑傳往目的地,因此能否到達(dá)目的地,到達(dá)目的地的時(shí)間以及內(nèi)容的正確性都是不能被保證的。UDP操作簡(jiǎn)單,而且僅需要較少的監(jiān)護(hù)。例如視頻會(huì)議系統(tǒng),并不要求音頻視頻數(shù)據(jù)絕對(duì)的正確,只要保證連貫性就可以了,這種情況下顯然使用UDP會(huì)更合理一些。目錄IP地址端口包基于TCP編程15Socket通常稱作“套接字”,通常通過(guò)“套接字”向網(wǎng)絡(luò)發(fā)出請(qǐng)求或者應(yīng)答網(wǎng)絡(luò)請(qǐng)求。主機(jī)甲Socket通信原理A程序主機(jī)乙B程序TCP/IP協(xié)議網(wǎng)卡網(wǎng)絡(luò)管理軟件socketsocket主機(jī)甲上的A程序?qū)⒁欢螖?shù)據(jù)寫入socket中主機(jī)乙上的B程序從socket中讀取這段數(shù)據(jù)IP地址IP地址網(wǎng)絡(luò)中有多臺(tái)計(jì)算機(jī),它們必須通過(guò)某種標(biāo)識(shí)來(lái)區(qū)分每一臺(tái)機(jī)器,這就是IP地址;IP地址由4個(gè)字節(jié)共32位二進(jìn)制數(shù)組成,類似于:;在網(wǎng)絡(luò)尋找某一臺(tái)計(jì)算機(jī)都是依靠它的IP地址(用域名或計(jì)算機(jī)名定位主機(jī)其實(shí)也是通過(guò)某種服務(wù)轉(zhuǎn)成IP地址后再找到該主機(jī))許多網(wǎng)絡(luò)地址被保留用于特殊用途;和就是兩個(gè)此類地址,第一個(gè)稱為缺省路由,后一個(gè)是環(huán)回地址;被保留用于用戶主機(jī)的本地IP話務(wù),它被分配給一個(gè)特殊接口,即起到閉合電路作用的環(huán)回接口。端口端口在一臺(tái)物理性的計(jì)算機(jī)中,往往運(yùn)行著多個(gè)網(wǎng)絡(luò)程序,一個(gè)IP地址并不足以完整標(biāo)識(shí)一個(gè)服務(wù)器,因此,端口是機(jī)器內(nèi)部獨(dú)一無(wú)二的場(chǎng)所;一臺(tái)計(jì)算機(jī)上可能同時(shí)運(yùn)行多個(gè)網(wǎng)絡(luò)程序,IP地址只能確保把數(shù)據(jù)送到指定的計(jì)算機(jī),但不能保證把這些數(shù)據(jù)傳遞給哪個(gè)網(wǎng)絡(luò)程序;端口使用一個(gè)16位的數(shù)字來(lái)表示,它的范圍是0~65535,1024以下的端口號(hào)保留給預(yù)定義的服務(wù),如:http使用80端口;網(wǎng)絡(luò)間通信其實(shí)是在網(wǎng)絡(luò)應(yīng)用程序端口之間進(jìn)行的。包使用包可以實(shí)現(xiàn)Java的網(wǎng)絡(luò)功能,其中包含了一系列與網(wǎng)絡(luò)通訊相關(guān)的類,比較重要的有:InetAddressSocketServerSocket如果要進(jìn)行網(wǎng)絡(luò)通訊編程的話,必須導(dǎo)入此包。包客戶端Socket(InetAddressaddress,intport);Socket(InetAddressaddress,intport,booleanstream);Socket(Stringhost,intprot);Socket(Stringhost,intprot,booleanstream);服務(wù)器端:ServerSocket(intport);獲得輸入輸出流,Socket類中的方法getInputStream,獲得基于當(dāng)前Socket的輸入流getOutputStream,獲得基于當(dāng)前Socket的輸出流Socket編程步驟服務(wù)器端創(chuàng)建ServerSocket對(duì)象,調(diào)用accept方法返回Socket對(duì)象客戶端創(chuàng)建Socket對(duì)象,通過(guò)端口連接到服務(wù)器客戶端、服務(wù)器端都使用Socket中的getInputStream方法和getOutputStream方法獲得輸入流和輸出流,進(jìn)一步進(jìn)行數(shù)據(jù)讀寫操作總結(jié)網(wǎng)絡(luò)上的計(jì)算機(jī)通過(guò)IP地址來(lái)區(qū)分不同的機(jī)器;端口是數(shù)據(jù)的通道,使得多個(gè)應(yīng)用程序在同一主機(jī)上進(jìn)行網(wǎng)絡(luò)通信;應(yīng)用程序由一個(gè)IP地址和一個(gè)端口號(hào)唯一確定。InetAddress用來(lái)描述主機(jī)地址;Socket用來(lái)創(chuàng)建兩臺(tái)主機(jī)之間的連接;ServerSocket用來(lái)偵聽(tīng)來(lái)自客戶端的請(qǐng)求;Socket通常稱作“套接字”,通常通過(guò)“套接字”向網(wǎng)絡(luò)發(fā)出請(qǐng)求或者應(yīng)答網(wǎng)絡(luò)請(qǐng)求。單一服務(wù)器對(duì)多客戶端服務(wù)端:1、創(chuàng)建套接字。2、將套接字綁定到一個(gè)本地地址和端口上。3、將套接字設(shè)為監(jiān)聽(tīng)模式,準(zhǔn)備接收客戶請(qǐng)求。4、等待客戶請(qǐng)求到來(lái);當(dāng)請(qǐng)求到來(lái)后,接受連接請(qǐng)求,返回一個(gè)新的對(duì)應(yīng)于此次連接的套接字。啟動(dòng)線程為當(dāng)前的連接服務(wù)。5、返回,等待另一客戶請(qǐng)求。6、關(guān)閉套接字??蛻舳耍?、創(chuàng)建套接字。2、向服務(wù)器發(fā)出連接請(qǐng)求。3、和服務(wù)器端進(jìn)行通信。4、關(guān)閉套接字。單一服務(wù)器對(duì)多客戶端單一服務(wù)器對(duì)多客戶端服務(wù)端:每次連接成功一個(gè)客戶端,則啟動(dòng)一個(gè)線程為其服務(wù)publicclassServer{ publicstaticvoidmain(String[]args)throwsIOException{ ServerSocketss=newServerSocket(10086); System.out.println("服務(wù)器正常啟動(dòng)。。。"); while(true){ Socketsocket=ss.accept(); System.out.println("用戶接入成功。。。"); newServerThread(socket).start(); }}}UDPa.DatagramPacket與DatagramSocket位于包中b.DatagramPacket表示存放數(shù)據(jù)的數(shù)據(jù)報(bào),DatagramSocket表示接受或發(fā)送數(shù)據(jù)報(bào)的套接字c.由這兩個(gè)類所有構(gòu)成的網(wǎng)絡(luò)鏈接是基于UDP協(xié)議,是一種不可靠的協(xié)議。之所以不可靠是因?yàn)榘l(fā)送方不負(fù)責(zé)數(shù)據(jù)是否發(fā)送成功,接收方收到數(shù)據(jù)時(shí)也不會(huì)向發(fā)送方反饋成功消息,容易導(dǎo)致信息的丟失。但是這種協(xié)議卻是快捷的,比如CS(半條命)游戲就是基于UDP協(xié)議,否則我們估計(jì)要玩一次游戲后就會(huì)把機(jī)子砸了,所以我們可以看到游戲有時(shí)會(huì)失幀。DatagramSocket的構(gòu)造器DatagramSocket():創(chuàng)建一個(gè)DatagramSocket實(shí)例,并將該對(duì)象綁定到本機(jī)默認(rèn)IP地址、本機(jī)所有可用端口中隨機(jī)選擇的某個(gè)端口。DatagramSocket(intprot):創(chuàng)建一個(gè)DatagramSocket實(shí)例,并將該對(duì)象綁定到本機(jī)默認(rèn)IP地址、指定端口。DatagramSocket(intport,InetAddressladdr):創(chuàng)建一個(gè)DatagramSocket實(shí)例,并將該對(duì)象綁定到指定IP地址、指定端口。通常在創(chuàng)建服務(wù)器時(shí),我們創(chuàng)建指定端口的DatagramSocket實(shí)例--這樣保證其他客戶端可以將數(shù)據(jù)發(fā)送到該服務(wù)器。一旦得到了DatagramSocket實(shí)例之后,就可以通過(guò)如下兩個(gè)方法來(lái)接收和發(fā)送數(shù)據(jù):receive(DatagramPacketp):從該DatagramSocket中接收數(shù)據(jù)報(bào)。send(DatagramPacketp):以該DatagramSocket對(duì)象向外發(fā)送數(shù)據(jù)報(bào)。從上面兩個(gè)方法可以看出,使用DatagramSocket發(fā)送數(shù)據(jù)報(bào)時(shí),DatagramSocket并不知道將該數(shù)據(jù)報(bào)發(fā)送到哪里,而是由DatagramPacket自身決定數(shù)據(jù)報(bào)的目的。就像碼頭并不知道每個(gè)集裝箱的目的地,碼頭只是將這些集裝箱發(fā)送出去,而集裝箱本身包含了該集裝箱的目的地。當(dāng)Client/Server程序使用UDP協(xié)議時(shí),實(shí)際上并沒(méi)有明顯的服務(wù)器和客戶端,因?yàn)閮煞蕉夹枰冉⒁粋€(gè)DatagramSocket對(duì)象,用來(lái)接收或發(fā)送數(shù)據(jù)報(bào),然后使用DatagramPacket對(duì)象作為傳輸數(shù)據(jù)的載體。通常固定IP、固定端口的DatagramSocket對(duì)象所在的程序被稱為服務(wù)器,因?yàn)樵揇atagramSocket可以主動(dòng)接收客戶端數(shù)據(jù)。測(cè)試時(shí)先啟動(dòng)接收方,然后啟動(dòng)發(fā)送方DatagramPacket的構(gòu)造器DatagramPacket(bytebuf[],intlength):以一個(gè)空數(shù)組來(lái)創(chuàng)建DatagramPacket對(duì)象,該對(duì)象的作用是接收DatagramSocket中的數(shù)據(jù)。DatagramPacket(bytebuf[],intlength,InetAddressaddr,intport):以一個(gè)包含數(shù)據(jù)的數(shù)組來(lái)創(chuàng)建DatagramPacket對(duì)象,創(chuàng)建該DatagramPacket時(shí)還指定了IP地址和端口--這就決定了該數(shù)據(jù)報(bào)的目的。DatagramPacket(byte[]buf,intoffset,intlength):以一個(gè)空數(shù)組來(lái)創(chuàng)建DatagramPacket對(duì)象,并指定接收到的數(shù)據(jù)放入buf數(shù)組中時(shí)從offset開(kāi)始,最多放length個(gè)字節(jié)。DatagramPacket(byte[]buf,int
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 自動(dòng)報(bào)靶器課程設(shè)計(jì)
- 自行車cad課程設(shè)計(jì)
- 有關(guān)趣味數(shù)學(xué)的課程設(shè)計(jì)
- 幼兒園銅鼓主題課程設(shè)計(jì)
- 網(wǎng)絡(luò)技術(shù)課程設(shè)計(jì)
- 系統(tǒng)規(guī)劃課程設(shè)計(jì)
- 椅子美背課程設(shè)計(jì)
- 新材料行業(yè)技術(shù)工作總結(jié)
- 建筑行業(yè)推廣方案分享
- 電動(dòng)車課程設(shè)計(jì)摘要
- 張家爺爺?shù)男』ü?
- 高中思想政治-高三一輪復(fù)習(xí)講評(píng)課教學(xué)課件設(shè)計(jì)
- 自動(dòng)噴水滅火系統(tǒng)的設(shè)計(jì)計(jì)算
- 教師評(píng)職稱個(gè)人綜述
- 旅游景區(qū)組織機(jī)構(gòu)
- LSI-陣列卡操作手冊(cè)
- 漢字文化解密(華中師范大學(xué))超星爾雅學(xué)習(xí)通網(wǎng)課章節(jié)測(cè)試答案
- 黑龍江省哈爾濱市八年級(jí)上學(xué)期物理期末考試試卷及答案
- 商業(yè)綜合體設(shè)計(jì)說(shuō)明書(shū)
- GB/T 19587-2017氣體吸附BET法測(cè)定固態(tài)物質(zhì)比表面積
- 比賽車門凹陷修復(fù)
評(píng)論
0/150
提交評(píng)論