




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
Java程序設計
項目10Java網(wǎng)絡編程主要內(nèi)容:一、網(wǎng)絡基礎知識二、URL類和InetAddress類三、Socket通信
TCP/IP協(xié)議是由斯坦福大學的研究人員提出的。80年代隨著UNIX操作系統(tǒng)的成功,TCP/IP成為UNIX機器的標準網(wǎng)絡協(xié)議。隨著ARPANET逐漸發(fā)展為Internet,TCP/IP協(xié)議便成了Internet的標準連接協(xié)議。在TCP/IP中有三個最常用的協(xié)議,理解IP、TCP、UDP這三個協(xié)議對于開發(fā)網(wǎng)絡應用程序是至關重要的。下面先了解幾個基本概念。
(1)IP地址IP是英文InternetProtocol的縮寫,意思是“網(wǎng)絡之間互連的協(xié)議”,也就是計算機網(wǎng)絡相互連接并進行通信而設計的協(xié)議。IP協(xié)議中一個非常重要的內(nèi)容就是給每個連接在Internet上的可訪問對象都規(guī)定了一個唯一的地址,這個地址稱為IP地址。任務1網(wǎng)絡基礎知識1、TCP/IP基本概念(2)端口號端口號是指網(wǎng)絡通信時同一機器上的不同進程的標識,其中0~1023為系統(tǒng)保留的端口號。
(3)服務類型服務類型是指網(wǎng)絡中的各種服務。例如:超文本傳輸協(xié)議(HTTP),文件傳輸協(xié)議(FTP),遠程登錄(Telnet),簡單郵件傳輸協(xié)議(SMTP)。
(4)套接字一個在Internet上運行的應用程序可以用IP地址和端口號進行標識,這就是套接字(Socket)。也就是說,一個套接字由一個IP地址和一個端口號唯一確定,IP地址和端口號組成了所謂的Socket。任務1網(wǎng)絡基礎知識(5)客戶機與服務器客戶機/服務器(Client/Server,簡稱C/S)模式是一種先進的分布式計算模式,這種模式最大的特點就是使用客戶機和服務器兩方的資源和計算能力執(zhí)行同一個特定的任務,實現(xiàn)負載由客戶機和服務器兩方共同承擔。任務1網(wǎng)絡基礎知識2、TCP與UDP協(xié)議
TCP是TranferControlProtocol的簡稱,是一種面向連接的保證可靠傳輸?shù)膮f(xié)議。通過TCP協(xié)議傳輸,得到的是一個順序的無差錯的數(shù)據(jù)流。發(fā)送方和接收方的成對的兩個Socket之間必須建立連接,以便在TCP協(xié)議的基礎上進行通信,當一個Socket(通常都是ServerSocket)等待建立連接時,另一個Socket可以要求進行連接,一旦這兩個Socket連接起來,它們就可以進行雙向數(shù)據(jù)傳輸,雙方都可以進行發(fā)送或接收操作。
UDP是UserDatagramProtocol的簡稱,是一種無連接的協(xié)議,每個數(shù)據(jù)報都是一個獨立的信息,包括完整的源地址或目的地址,它在網(wǎng)絡上以任何可能的路徑傳往目的地,因此能否到達目的地,到達目的地的時間以及內(nèi)容的正確性都是不能被保證的。任務1網(wǎng)絡基礎知識一個URL包括兩部分內(nèi)容:協(xié)議名稱和資源名稱,中間用冒號隔開。URL的規(guī)范格式結構如下:
protocol://host_name:port_number/file_name/reference說明:(1)protocol(傳輸協(xié)議):指示所要獲取資源的應用層協(xié)議。(2)host_name(主機名稱):指示資源所在主機的名稱或主機的IP地址,如www.sina.就是新浪網(wǎng)的主機名。(3)port_number(端口號):這是個可選項,指示連接時所使用的服務器端口號。(4)file_name(文件名):指示資源在主機上的完整名字(包括文件的完整路徑名)。(5)reference(參考點):指示資源中的特定位置,用來標識一個文件中特定的偏移位置。任務2URL類和InetAddress類1、URL基礎知識(1)URL類構造方法
●publicURL(Stringspec):通過一個表示URL地址的字符串可以構造一個URL對象?!駊ublicURL(URLcontext,Stringspec):通過基URL和相對URL構造一個URL對象?!駊ublicURL(Stringprotocol,Stringhost,Stringfile):根據(jù)指定protocol、host和file創(chuàng)建URL對象?!駊ublicURL(Stringprotocol,Stringhost,intport,Stringfile):根據(jù)指定protocol、host、port號和file創(chuàng)建URL對象。任務2URL類和InetAddress類2、URL類(2)URL類常用方法●publicStringgetProtocol():獲取該URL的協(xié)議名?!駊ublicStringgetHost():獲取該URL的主機名?!駊ublicintgetPort():獲取該URL的端口號,如果沒有設置端口,返回-1?!駊ublicStringgetFile():獲取該URL的文件名。●publicStringgetRef():獲取該URL在文件中的相對位置?!駊ublicStringgetQuery():獲取該URL的查詢信息?!駊ublicStringgetPath():獲取該URL的路徑。●publicStringgetAuthority():獲取該URL的權限信息?!駊ublicStringgetUserInfo():獲得使用者的信息。●publicStringgetRef():獲得該URL的錨。任務2URL類和InetAddress類例10.1通過URL獲取網(wǎng)絡站點的屬性信息。import.*;importjava.io.*;publicclassGetURL{publicstaticvoidmain(Stringargs[])throwsException{URLmyURL=newURL(":8080");try{URLurl=newURL(myURL,"/outpage.aspx?id=727"); //輸出該URL對象的協(xié)議名
System.out.println("protocol="+url.getProtocol()); //輸出該URL對象所連接的主機名稱
System.out.println("host="+url.getHost()); //輸出該URL對象使用的端口號
System.out.println("port="+url.getPort()); //輸出該URL的獲取文件的路徑
System.out.println("path="+url.getPath()); //輸出該URL對象所連接主機中對應的文件
System.out.println("filename="+url.getFile()); //輸出該URL在文件中的相對位置
System.out.println("ref="+url.getRef());任務2URL類和InetAddress類 //輸出該URL的查詢信息
System.out.println("query="+url.getQuery()); //輸出使用者的信息
System.out.println("Userinfo="+url.getUserInfo()); System.out.println("Authority="+url.getAuthority());}catch(MalformedURLExceptione){ System.out.println("MalformedURLException:"+e);}}}程序運行結果為:protocol=httphost=port=8080path=/outpage.aspxfilename=/outpage.aspx?id=727ref=nullquery=id=727Userinfo=nullAuthority=:8080任務2URL類和InetAddress類(3)URL讀取WWW網(wǎng)絡資源●publicfinalInputStreamopenStream()該方法是獲取來自指定URL對象的輸入流。有了該輸入流,可采用流的讀操作獲得該URL對象的具體內(nèi)容。例10.2打印網(wǎng)易Web主頁的過程。importjava.io.*;import.*;publicclassReadURL1{publicReadURL1(){}publicstaticvoidmain(Stringargs[]){URLurl=null;InputStreamin=null;try{ System.out.println("CreatingURL…"); url=newURL("");//根據(jù)所指定的地址實例化一個URL對象
System.out.println("OpeningStream…"); in=url.openStream();//打開該URL對象的輸入流任務2URL類和InetAddress類
InputStreamReaderisr=newInputStreamReader(in); BufferedReaderbuffer=newBufferedReader(isr);//將輸入流包裝進BufferedReader流中,以便能執(zhí)行讀取
System.out.println("Readingdata…"); StringlineOfData; while((lineOfData=buffer.readLine())!=null){//通過一循環(huán)語句將輸入流中內(nèi)容讀出并打印
System.out.println("LINE:"+lineOfData);}}catch(MalformedURLExceptione){System.out.println("BadURL");}catch(IOExceptione){System.out.println("IOError"+e.getMessage());}finally{if(in!=null) try{ in.close(); System.out.println("StreamClosed."); }catch(IOExceptione){}}System.exit(0);}}任務2URL類和InetAddress類URLConnection類是一個抽象公有類,它提供了與遠程對象進行通信和獲取遠程URL資源的方法。表10-1列出了URLConnection類的部分方法。任務2URL類和InetAddress類3、URLConnection類例10.3使用URLConnction類獲取網(wǎng)站頁面信息與HTML文本。import.*;importjava.io.*;importjava.util.Date;classURLConnect{publicstaticvoidmain(Stringargs[])throwsException{intc;URLurlobj=newURL("");//創(chuàng)建一URL對象URLConnectionurlCon=urlobj.openConnection();//獲取URLConnection對象System.out.println("Date:"+newDate(urlCon.getDate()));//輸出文件的屬性System.out.println("Content-Type:"+urlCon.getContentType());//輸出內(nèi)容類型System.out.println("Expires:"+urlCon.getExpiration());//輸出expires頭字段的值System.out.println("Last-Modified:"+newDate(urlCon.getLastModified()));//輸出最后修改時間intlen=urlCon.getContentLength();任務2URL類和InetAddress類if(len>0){System.out.println("*****網(wǎng)頁內(nèi)容*****");InputStreaminput=urlCon.getInputStream();inti=len;while(((c=input.read())!=-1)&&(--i>0)){ System.out.print((char)c);}input.close();//輸出完畢,關閉輸入流
}else{//如果連接失敗,輸出對象不存在System.out.println("NoContentAvaiable");}}}程序運行后部分內(nèi)容如下:Date:MonSep0516:34:52CST2016Content-Type:text/htmlExpires:1473065092000Last-Modified:MonSep0501:39:16CST2016Content-Length:19923*****網(wǎng)頁內(nèi)容*****???<HTML><HEAD><TITLE>è??????????????é??</TITLE>….任務2URL類和InetAddress類
(1)InetAddress對象創(chuàng)建由于InetAddress類沒有構造方法,因此不能用new來構造一個InetAddress實例,一般通過引用其靜態(tài)方法而獲得實際的InetAddress對象,所采用的方法有:●publicstaticInetAddress[]getAllByName(Stringhost)返回指定主機名的所有InetAddress對象。參數(shù)host表示指定的主機。返回值存放于InetAddress[]數(shù)組中?!駊ublicstaticInetAddressgetByAddress(byte[]addr)根據(jù)給定的IP地址創(chuàng)建一個InetAddress對象,可用來查找該IP對應的主機名。●publicstaticInetAddressgetByName(Stringhost)根據(jù)給定的主機名創(chuàng)建一個InetAddress對象,可用來查找該主機的IP地址。任務2URL類和InetAddress類4、InetAddress類●publicstaticInetAddressGetLocalHost()返回當?shù)刂鳈C的InetAddress對象。(2)InetAddress類常用方法●publicStringgetHostAddress():得到IP地址。●publicStringgetHostName():得到主機名(即域名)?!駊ublicbooleanisMulticastAddress():判斷是否是IP多播地址。●publicbooleanisLoopbackAddress():判斷是否是回送地址。例10.4用InetAddress類方法獲取本地地址。import.*;publicclassGetLocalHostIP{publicstaticvoidmain(Stringargs[]){InetAddresslocalHost=null;try{//通過類方法getLocalHost產(chǎn)生實例對象
localHost=InetAddress.getLocalHost();}catch(UnknownHostExceptionex){}System.out.println(localHost);//輸出結果
}}任務2URL類和InetAddress類例10.5用InetAddress類方法實現(xiàn)域名解析的功能。import.*;publicclassDomainName{publicstaticvoidmain(Stringargs[]){try{InetAddressaddress=InetAddress.getByName(""); Stringdomain_name=address.getHostName();//獲取address所含的域名
StringIP_name=address.getHostAddress();//獲取address所含的IP地址
System.out.println(domain_name); System.out.println(IP_name);}catch(UnknownHostExceptione){ System.out.println("無法找到"); }}}程序運行結果為:4任務2URL類和InetAddress類一般的網(wǎng)絡通信模式是客戶機/服務器模式,在Java應用程序中將Socket類和ServerSocket類分別用于客戶端和服務器端,在任意兩臺機器之間建立連接。在java.net包中提供的Socket類實現(xiàn)客戶端的通信功能,ServerSocket類實現(xiàn)服務器端的通信功能。當客戶機和服務器連通后,它們之間就建立了一種雙向通信模式,其工作過程如下圖所示。任務3Socket通信1、Socket通信的結構任務3Socket通信
ServerSocket類的構造方法如下:●publicServerSocket():創(chuàng)建非綁定服務器套接字。●publicServerSocket(intport):創(chuàng)建綁定到特定端口的服務器套接字?!駊ublicServerSocket(intport,intbacklog):利用指定的backlog創(chuàng)建服務器套接字并將其綁定到指定的本地端口號?!駊ublicServerSocket(intport,intbacklog,InetAddressbindAddr):利用指定的backlog創(chuàng)建服務器套接字并將其綁定到指定的本地端口號和IP地址。ServerSocket類常用方法如下:●publicSocketaccept():偵聽并接收到此ServerSocket的連接,此方法在連接傳入之前一直阻塞。任務3Socket通信2、服務器端套接字●publicvoidclose():使服務器釋放占用的資源,并斷開所有與客戶端的連接。●publicInetAddressgetInetAddress():返回當前服務器綁定的IP地址信息注意:這些方法都將拋出IOException異常,在程序中需要捕獲處理。任務3Socket通信3、客戶端套接字
Socket類的構造方法有如下幾種:●publicSocket(Stringhost,intport):創(chuàng)建一個流套接字并將其連接到指定主機上的指定端口號?!駊ublicSocket(InetAddressaddress,intport):創(chuàng)建一個流套接字并將其連接到指定IP地址的指定端口號。address參數(shù)指定IP地址。
●publicSocket(Stringhost,intport,InetAddresslocalAddr,intlocalPort):創(chuàng)建一個套接字并將其連接到指定遠程主機的指定遠程端口。參數(shù)localAddr和localPort用來設置客戶端的IP地址和端口?!駊ublicSocket(InetAddressaddress,intport,InetAddresslocalAddr,intlocalPort):創(chuàng)建一個套接字并將其連接到指定遠程地址的指定遠程端口。參數(shù)localAddr和localPort用來設置客戶端的IP地址和端口?!駊ublicSocket(Stringhost,intport,booleanstream):創(chuàng)建一個套接字并將其連接到指定主機上的指定端口號。參數(shù)stream為true,則創(chuàng)建流套接字,否則創(chuàng)建數(shù)據(jù)報套接字?!駊ublicSocket(InetAddressaddress,intport,booleanstream):創(chuàng)建一個套接字并將其連接到指定IP地址的指定端口號。參數(shù)stream為true,則創(chuàng)建流套接字,否則創(chuàng)建數(shù)據(jù)報套接字。任務3Socket通信
Socket類常用的方法如下:●publicInetAddressgetInetAddress():返回遠程服務端的IP地址?!駊ublicintgetPort():返回遠程服務端的端口。●publicInetAddressgetLocalAddress():返回本地客戶端的IP地址。●publicintgetLocalPort():返回本地客戶端的端口?!駊ublicInputStreamgetInputStream():從Socket中獲取輸入流。●publicOutputStreamgetOutStream():從Socket中獲得輸出流?!駊ublicvoidclose():關閉Scoket。注意:這些方法都將拋出IOException異常,在程序中需要捕獲處理。任務3Socket通信任務3Socket通信4、ScoketTCP編程
Socket客戶端:(1)Sockets=newSocket(ip,port);//打開一個套接字,發(fā)送請求(2)InputStreamistream=s.getInputStream();//接收數(shù)據(jù)(3)OutputStreamostream=s.getOutputStream();//發(fā)送數(shù)據(jù)(4)istream.close();ostrem.close();s.close();//關閉輸入輸出流和ScoketSocket服務器:(1)ServerSocketserver=newServerSocket(port);//創(chuàng)建一個端口(2)Sockets=server.accept();//只有當有客戶端請求并連接,函數(shù)才會返回任務3Socket通信(3)InputStreamistream=s.getInputStream();//接收數(shù)據(jù)(4)OutputStreamostream=s.getOutputStream();//發(fā)送數(shù)據(jù)(5)istream.close();ostrem.close();s.close();//關閉輸入輸出流和Scoket5、Scoket多線程編程當有多個客戶同時向該服務器發(fā)出請求時,服務器程序是一個一個輪流處理的,若服務器程序?qū)γ總€請求有較為復雜的處理,就會導致某些客戶有較長的等待時間。那么如何才能提高服務器程序的處理效率?比較切實的解決辦法是在服務器程序中采用多線程的設計,即當有客戶的Socket連接到達則為其創(chuàng)建一個線程,由該線程完成客戶的請求工作。任務3Socket通信6、ScoketUDP編程數(shù)據(jù)報的優(yōu)點是通信速度比較快。在要求較快的數(shù)據(jù)傳輸速度而又對信息質(zhì)量要求不高的情況下,使用UDP協(xié)議進行通信更為合適。比如在需要很強的實時交互性的場合,像網(wǎng)絡游戲、視頻會議等,在計算機網(wǎng)絡日益穩(wěn)定的今天,UDP通信越來越多地為人們所重視。
(1)DatagramPacket類和DatagramSocket類DatagramPacket類的常用構造方法:●publicDatagramPacket(byte[]buf,intlength):表示創(chuàng)建一個指定長度的接收數(shù)據(jù)報對象?!駊ublicDatagramPacket(byte[]buf,intlength,InetAddressaddress,intp
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 設計課題申報書怎么寫好
- 吉林課題立項申報書
- 前端外包開發(fā)合同范本
- 單位和職工合同范本
- 信托制物業(yè)合同范本
- 員工疾病免責合同范本
- 品牌定制家具合同范本
- 勞務合同范本約束條款規(guī)定
- 后期剪輯合同范本
- 加盟代理項目合同范本
- 2025年南昌理工學院單招職業(yè)技能測試題庫審定版
- 2025年廣西職業(yè)院校技能大賽高職組(商務數(shù)據(jù)分析賽項)參考試題庫資料及答案
- 2025年黑龍江農(nóng)墾職業(yè)學院單招職業(yè)傾向性測試題庫帶答案
- 四年級下冊 道德與法治 全冊教案
- 個人租房房屋合同范本
- MSA測量系統(tǒng)培訓
- 冷庫安全培訓
- 線上教育平臺教師教學行為規(guī)范與責任書
- 2025年內(nèi)蒙古法院系統(tǒng)招聘用制書記員2988人過渡高頻重點模擬試卷提升(共500題附帶答案詳解)
- 中央2025年全國婦聯(lián)所屬在京事業(yè)單位招聘93人筆試歷年參考題庫附帶答案詳解
- 《環(huán)境污染對生態(tài)系統(tǒng)的影響》課件
評論
0/150
提交評論