《Java程序設(shè)計(jì)》課件-javacp13網(wǎng)絡(luò)編程_第1頁(yè)
《Java程序設(shè)計(jì)》課件-javacp13網(wǎng)絡(luò)編程_第2頁(yè)
《Java程序設(shè)計(jì)》課件-javacp13網(wǎng)絡(luò)編程_第3頁(yè)
《Java程序設(shè)計(jì)》課件-javacp13網(wǎng)絡(luò)編程_第4頁(yè)
《Java程序設(shè)計(jì)》課件-javacp13網(wǎng)絡(luò)編程_第5頁(yè)
已閱讀5頁(yè),還剩25頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

第十三章網(wǎng)絡(luò)編程

Java程序設(shè)計(jì)本章主要內(nèi)容

網(wǎng)絡(luò)編程基本知識(shí)URL編程Socket編程UDP編程小結(jié)2024/12/24李飛——計(jì)算中心2/30網(wǎng)絡(luò)編程的基本知識(shí)1.TCP協(xié)議。TCP協(xié)議稱(chēng)為傳輸控制協(xié)議,它的主要功能是在端點(diǎn)與端點(diǎn)之間建立持續(xù)的連接而進(jìn)行通信。2.UDP協(xié)議。UDP協(xié)議稱(chēng)為用戶(hù)數(shù)據(jù)報(bào)協(xié)議,在利用UDP傳輸時(shí),需要將傳輸?shù)臄?shù)據(jù)定義成數(shù)據(jù)報(bào)(Datagram),在數(shù)據(jù)報(bào)中指明數(shù)據(jù)所要到達(dá)的端點(diǎn),然后再將數(shù)據(jù)報(bào)發(fā)送出去。3.IP協(xié)議。IP協(xié)議規(guī)定每臺(tái)連入Internet的主機(jī)必須具備一個(gè)唯一的地址,以此來(lái)識(shí)別主機(jī)在網(wǎng)絡(luò)中的位置。4.DNS。DNS稱(chēng)為域名系統(tǒng),把用戶(hù)難記的IP地址轉(zhuǎn)換為相對(duì)有意義的域名。域名有一定的結(jié)構(gòu),一般形式如下:主機(jī)名.組織名.組織類(lèi)型名.頂級(jí)域名2024/12/24李飛——東北大學(xué)秦皇島分校計(jì)算中心3/35網(wǎng)絡(luò)編程基本知識(shí)Socket。Socket通常被稱(chēng)作“套接字”,它是一個(gè)通信鏈的句柄,用于處理數(shù)據(jù)的接收與發(fā)送。端口。在網(wǎng)絡(luò)通信過(guò)程中,IP地址和端口號(hào)為應(yīng)用程序提供了一種確定的地址標(biāo)識(shí),IP地址標(biāo)識(shí)Internet上的計(jì)算機(jī),而端口號(hào)表明將數(shù)據(jù)包發(fā)送給目的計(jì)算機(jī)上哪個(gè)應(yīng)用程序。每個(gè)Socket都有其對(duì)應(yīng)的端口號(hào),端口號(hào)是一個(gè)16位的二進(jìn)制整數(shù),其范圍為0~65535,其中0~1023為系統(tǒng)所保留,專(zhuān)門(mén)用于那些通用的網(wǎng)絡(luò)服務(wù)服務(wù)器和客戶(hù)機(jī)。在網(wǎng)絡(luò)中,為其他計(jì)算機(jī)提供數(shù)據(jù)、信息或服務(wù)的計(jì)算機(jī)被稱(chēng)為服務(wù)器。使用其他計(jì)算機(jī)的數(shù)據(jù)、信息或服務(wù)的計(jì)算機(jī)被稱(chēng)為客戶(hù)機(jī)。2024/12/24李飛——東北大學(xué)秦皇島分校計(jì)算中心4/35與網(wǎng)絡(luò)編程相關(guān)的類(lèi)2024/12/24李飛——東北大學(xué)秦皇島分校計(jì)算中心5/35DatagramPacketDatagramSocketInetAddressInet4AddressInet6AddressServerSocketSocketURLURLConnectionHttpURLConnectionURLEncoder常見(jiàn)的網(wǎng)絡(luò)編程模式URL通信模式。利用URL類(lèi)和URLConnection類(lèi)進(jìn)行網(wǎng)絡(luò)上數(shù)據(jù)信息的輸入和輸出,面向應(yīng)用層協(xié)議編程。Socket通信模式。利用ServerSocket和Scoket類(lèi),通過(guò)傳輸層的TCP協(xié)議,實(shí)現(xiàn)網(wǎng)絡(luò)上兩個(gè)節(jié)點(diǎn)之間的通信。Datagram通信模式。使用DatagramSocket、DatagramPacket、MulticastSocket類(lèi),面向傳輸層的UDP協(xié)議編程,實(shí)現(xiàn)通信。2024/12/24李飛——東北大學(xué)秦皇島分校計(jì)算中心6/35URL編程URL格式協(xié)議名://主機(jī)名[:端口號(hào)[路徑/文件名]]協(xié)議名:指明獲得資源所使用的傳輸協(xié)議,如http、ftp、file、gopher等。主機(jī)名:指文件所在的計(jì)算機(jī)的域名或IP地址,如。端口號(hào):指提供服務(wù)的應(yīng)用所提供的訪(fǎng)問(wèn)端口,例如http服務(wù)端口默認(rèn)為80,F(xiàn)TP服務(wù)的默認(rèn)端口為21。2024/12/24李飛——東北大學(xué)秦皇島分校計(jì)算中心7/35路徑/文件名:指資源在主機(jī)上的路徑和文件名組成的一個(gè)內(nèi)部引用。如URL地址/2017/12/09/VIDEkA16AVXeFxGucgx7bwjw171209.shtml中的“路徑/文件名”是“/2017/12/09/VIDEkA16AVXeFxGucgx7bwjw171209.shtml”說(shuō)明文件“VIDEkA16AVXeFxGucgx7bwjw171209.shtml”保存在主機(jī)根目錄下的“/2017/12/09”路徑下。在Java中我們通常把“路徑+文件名“統(tǒng)稱(chēng)為文件名。2024/12/24李飛——東北大學(xué)秦皇島分校計(jì)算中心8/35InetAddress類(lèi)

InetAddress類(lèi)是個(gè)抽象類(lèi),提供將主機(jī)名解析為其IP地址(或反之)的方法。InetAddress類(lèi)沒(méi)有構(gòu)造方法,要?jiǎng)?chuàng)建InetAddress類(lèi)的實(shí)例對(duì)象,通??梢允褂肐netAddress類(lèi)的靜態(tài)方法來(lái)構(gòu)造。如使用如下語(yǔ)句創(chuàng)建一個(gè)InetAddress實(shí)例。byte[]addr={118,16,92,12};InetAddressinteradd=InetAddress.getByAddress(addr);2024/12/24李飛——東北大學(xué)秦皇島分校計(jì)算中心9/35InteAddress類(lèi)的類(lèi)方法方法說(shuō)明getAllByName(Stringhost)在給定主機(jī)名的情況下,根據(jù)系統(tǒng)配置的名稱(chēng)服務(wù)返回其IP地址所組成的數(shù)組。getByAddress(byte[]addr)根據(jù)IP地址創(chuàng)建InetAddress對(duì)象。getByAddress(Stringhost,byte[]addr)根據(jù)主機(jī)名和IP地址創(chuàng)建InetAddress。getByName(Stringhost)根據(jù)主機(jī)確定主機(jī)的InteAddress。getLocalHost()返回本地主機(jī)的InteAddress。2024/12/24李飛——東北大學(xué)秦皇島分校計(jì)算中心10/35InteAddress類(lèi)的常用成員方法方法說(shuō)明getAddress()返回此InetAddress對(duì)象的原始IP地址。getCanonicalHostName()獲取此IP地址的完全限定域名。getHostAddress()返回IP地址字符串(以文本表現(xiàn)形式)。getHostName()獲取此IP地址的主機(jī)名。getLocalHost()返回本地主機(jī)。toString()將此IP地址轉(zhuǎn)換為String。2024/12/24李飛——東北大學(xué)秦皇島分校計(jì)算中心11/35例13.1:判定192.168.1網(wǎng)段中哪些計(jì)算機(jī)是活動(dòng)的。import.*;importjava.io.*;publicclasseg1301{publicstaticvoidmain(String[]args)throwsUnknownHostException{ Stringip=null; for(inti=100;i<=150;i++){ ip="192.168.1."+i; try{ InetAddresshost; host=InetAddress.getByName(ip); if(host.isReachable(1000)){ Stringhostname=host.getHostName(); System.out.println("IP地址"+ip+"的主機(jī)名稱(chēng)是:"+hostname);

} }catch(IOExceptione){e.printStackTrace();}

}}}2024/12/24李飛——東北大學(xué)秦皇島分校計(jì)算中心12/35URL類(lèi)URL類(lèi)的常用構(gòu)造方法2024/12/24李飛——東北大學(xué)秦皇島分校計(jì)算中心13/35方法說(shuō)明URL(Stringspec)根據(jù)String表示形式創(chuàng)建URL對(duì)象。URL(Stringprotocol,Stringhost,intport,Stringfile)根據(jù)協(xié)議名、主機(jī)名、端口號(hào)和文件名創(chuàng)建URL對(duì)象。URL(Stringprotocol,Stringhost,Stringfile)根據(jù)協(xié)議名稱(chēng)、主機(jī)名稱(chēng)和文件名稱(chēng)創(chuàng)建URL。URL(URLcontext,Stringspec)通過(guò)給定的spec對(duì)指定的上下文解析創(chuàng)建URL。因?yàn)閁RL表示的網(wǎng)絡(luò)資源,在Internet上并不一定存在,所以使用URL構(gòu)造方法創(chuàng)建URL對(duì)象時(shí),除URL(Stringspec)方法外,其他的構(gòu)造方法都會(huì)產(chǎn)生一個(gè).MalformedURLException的異常對(duì)象,所以在使用其他構(gòu)造方法時(shí)要注意對(duì)該異常的進(jìn)行處理。2024/12/24李飛——東北大學(xué)秦皇島分校計(jì)算中心14/35例采用URL(Stringspec)方法。URLurl=newURL("");采用URL(Stringprotocol,Stringhost,intport,Stringfile)方法。URLurl2=newURL("http","",80,"Pages/Gwork.html");采用URL(Stringprotocol,Stringhost,Stringfile)方法。URLurl3=newURL("http","","/pages/G.html");采用URL(URLcontext,Stringspec)方法。URLurl4=newURL(url,"/index.html?usrname=lqq#test");2024/12/24李飛——東北大學(xué)秦皇島分校計(jì)算中心15/35URL類(lèi)的常用實(shí)例方法(例13.2)方法說(shuō)明getContent()獲取URL的內(nèi)容。getDefaultPort()獲取與URL關(guān)聯(lián)協(xié)議的默認(rèn)端口號(hào)。getFile()獲取URL的文件名。getHost()獲取URL的主機(jī)名。getPath()獲取URL的路徑部分。getPort()獲取URL的端口號(hào)。getProtocol()獲取URL的協(xié)議名稱(chēng)。getQuery()獲取URL的查詢(xún)部分。toURI()返回與URL等效的URI。toString()構(gòu)造URL的字符串表示形式。openStream()打開(kāi)到URL的連接并返回一個(gè)用于從該連接讀入的InputStream。openConnection()返回一個(gè)URLConnection對(duì)象,它表示到URL所引用的遠(yuǎn)程對(duì)象的連接。openConnection(Proxyproxy)與openConnection()類(lèi)似,所不同是連接通過(guò)指定的代理建立;不支持代理方式的協(xié)議處理程序?qū)⒑雎栽摯韰?shù)并建立正常的連接。set(Stringprotocol,Stringhost,intport,Stringfile,Stringref)設(shè)置URL的字段。protocol是協(xié)議名,host是主機(jī)名,port是端口號(hào),file是資源文名,ref是URL中的內(nèi)部引用名。2024/12/24李飛——東北大學(xué)秦皇島分校計(jì)算中心16/35URLConnection類(lèi)使用URLConnection對(duì)象的一般方法如下:1)創(chuàng)建一個(gè)URL對(duì)象。2)調(diào)用URL對(duì)象的openConnection()方法創(chuàng)建這個(gè)URL的URLConnection對(duì)象。3)配置URLConnection。4)讀首部字段。5)獲取輸入流并讀數(shù)據(jù)。6)獲取輸出流并寫(xiě)數(shù)據(jù)。7)關(guān)閉連接。2024/12/24李飛——東北大學(xué)秦皇島分校計(jì)算中心17/35URLConnection類(lèi)的常用方法(例13.3)方法說(shuō)明getContentType()獲取文件類(lèi)型。getContentLength()獲取文件長(zhǎng)度。getDate()獲取文件創(chuàng)建時(shí)間。getLastModified()獲取文件最后修改時(shí)間。getExpiration()獲取文件過(guò)期時(shí)間。getURL()獲取連接的URL。getContent()獲取連接的內(nèi)容。getInputStream()獲取連接的輸入流getOutputStream()獲取連接的輸出流2024/12/24李飛——東北大學(xué)秦皇島分校計(jì)算中心18/35socket編程用Socket實(shí)現(xiàn)通信的S/C模型2024/12/24李飛——東北大學(xué)秦皇島分校計(jì)算中心19/35Socket構(gòu)造方法創(chuàng)建未連接套接字。Socket()創(chuàng)建一個(gè)連接到指定IP地址和端口的套接字。Socket(InetAddressaddress,intport) 創(chuàng)建一個(gè)連接到指定地址上的指定端口的套接字。Socket(InetAddressaddress,intport,InetAddresslocalAddr,intlocalPort)創(chuàng)建一個(gè)指定主機(jī)和端口號(hào)的套接字。Socket(Stringhost,intport)創(chuàng)建一個(gè)指定遠(yuǎn)程主機(jī)上的指定遠(yuǎn)程端口的套接字。Socket(Stringhost,intport,InetAddresslocalAddr,intlocalPort)2024/12/24李飛——東北大學(xué)秦皇島分校計(jì)算中心20/35Socket類(lèi)的常用實(shí)例方法bind(SocketAddressbindpoint)將套接字綁定到本地地址。getInetAddress()返回套接字連接的地址。getPort()返回套接字連接到的遠(yuǎn)程端口。getLocalPort()返回套接字綁定到的本地端口。getLocalAddress()獲取套接字綁定的本地地址。getInputStream()返回套接字的輸入流。getOutputStream()返回套接字的輸出流。connect(SocketAddressendpoint)將套接字連接到服務(wù)器。connect(SocketAddressendpoint,inttimeout)將套接字連接到服務(wù)器,并指定一個(gè)超時(shí)值。close()關(guān)閉套接字。2024/12/24李飛——東北大學(xué)秦皇島分校計(jì)算中心21/35舉例例13.4:編寫(xiě)一個(gè)端口掃描器程序,探測(cè)一臺(tái)主機(jī)中開(kāi)放的端口。解析:我們首先定義一個(gè)構(gòu)造方法用于設(shè)置被掃描的主機(jī),然后定義一個(gè)start()方法完成掃描操作。在start()方法中首先建立一個(gè)產(chǎn)生端口號(hào)的循環(huán),在循環(huán)中為每個(gè)端口號(hào)創(chuàng)建端口對(duì)象,如果能夠成功建立,則說(shuō)明這個(gè)端口開(kāi)放,如果拋出異常UnknownHostException則說(shuō)明本機(jī)無(wú)法識(shí)別目標(biāo)主機(jī),如果拋出異常IOException說(shuō)明該端口未開(kāi)放。代碼見(jiàn)教材例13.42024/12/24李飛——東北大學(xué)秦皇島分校計(jì)算中心22/35ServerSocket類(lèi)利用ServerSocket可以開(kāi)發(fā)服務(wù)器程序。ServerSocket類(lèi)包含了實(shí)現(xiàn)一個(gè)服務(wù)器要求的所用功能。ServerSocket類(lèi)的工作流程

在指定的監(jiān)聽(tīng)端口創(chuàng)建一個(gè)ServerSocket類(lèi)的對(duì)象S。調(diào)用對(duì)象S的accept()方法在指定的端口監(jiān)聽(tīng)到來(lái)的連接,并通過(guò)accept()獲取連接客戶(hù)端與服務(wù)器的Socket對(duì)象。調(diào)用getInputStream()方法和getOutputStream()方法獲得Socket對(duì)象的輸入流和輸出流。服務(wù)器與客戶(hù)端根據(jù)一定的協(xié)議交互數(shù)據(jù),直到一端請(qǐng)求關(guān)閉連接。服務(wù)器和客戶(hù)端關(guān)閉連接。服務(wù)器回到第2步,繼續(xù)監(jiān)聽(tīng)下一次的連接,而客戶(hù)端運(yùn)行結(jié)束。2024/12/24李飛——東北大學(xué)秦皇島分校計(jì)算中心23/35ServerSocket類(lèi)的常用構(gòu)造方法2024/12/24李飛——東北大學(xué)秦皇島分校計(jì)算中心24/35ServerSocket()創(chuàng)建非綁定服務(wù)器套接字。ServerSocket(intport)創(chuàng)建一個(gè)綁定到指定端口的服務(wù)器套接字。ServerSocket(intport,intbacklog)創(chuàng)建服務(wù)器套接字,將其綁定到指定的本地端口號(hào),并指定傳入連接隊(duì)列長(zhǎng)度為backlog。ServerSocket(intport,intbacklog,InetAddressbindAddr)創(chuàng)建服務(wù)器套接字,指定其端口、連接隊(duì)列長(zhǎng)度backlog和綁定的服務(wù)器IP地址ServerSocket類(lèi)的常用實(shí)例方法方法說(shuō)明accept()偵聽(tīng)并接受到此套接字的連接。bind(SocketAddressendpoint)將ServerSocket綁定到特定地址(IP地址和端口號(hào))。bind(SocketAddressendpoint,intbacklog)設(shè)定偵聽(tīng)隊(duì)列長(zhǎng)度backlog且將ServerSocket綁定到特定地址。close()關(guān)閉套接字。getInetAddress()返回服務(wù)器套接字的本地地址。getLocalPort()返回套接字在其上偵聽(tīng)的端口。getLocalSocketAddress()返回套接字綁定的端點(diǎn)的地址,如果尚未綁定則返回null。2024/12/24李飛——東北大學(xué)秦皇島分校計(jì)算中心25/35例13.6用ServerSocket實(shí)現(xiàn)時(shí)間服務(wù)器。importjava.io.*;import.*;importjava.util.*;publicclasseg13_6implementsRunnable{ intport; publiceg13_6(){ this(37);//設(shè)置時(shí)間服務(wù)器端口 } publiceg13_6(intport){ this.port=port; }2024/12/24李飛——東北大學(xué)秦皇島分校計(jì)算中心26/35publicvoidrun(){ try{

//創(chuàng)建服務(wù)器套接字 ServerSocketserver=newServerSocket(port); while(true){//輪流處理多個(gè)客戶(hù)端請(qǐng)求 Socketconn=null; try{conn=server.accept();//等待客戶(hù)端請(qǐng)求

Datenow=newDate();//生成系統(tǒng)時(shí)間

longnetTime=now.getTime()/1000+2208988800L;

byte[]time=newbyte[4];

for(inti=0;i<4;i++){

time[3-i]=(byte)(netTime&0x00000000000000FFL);

netTime>>=8; }//獲取套接

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論