版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第十三章網絡編程
Java程序設計本章主要內容
網絡編程基本知識URL編程Socket編程UDP編程小結2024/12/24李飛——計算中心2/30網絡編程的基本知識1.TCP協(xié)議。TCP協(xié)議稱為傳輸控制協(xié)議,它的主要功能是在端點與端點之間建立持續(xù)的連接而進行通信。2.UDP協(xié)議。UDP協(xié)議稱為用戶數(shù)據(jù)報協(xié)議,在利用UDP傳輸時,需要將傳輸?shù)臄?shù)據(jù)定義成數(shù)據(jù)報(Datagram),在數(shù)據(jù)報中指明數(shù)據(jù)所要到達的端點,然后再將數(shù)據(jù)報發(fā)送出去。3.IP協(xié)議。IP協(xié)議規(guī)定每臺連入Internet的主機必須具備一個唯一的地址,以此來識別主機在網絡中的位置。4.DNS。DNS稱為域名系統(tǒng),把用戶難記的IP地址轉換為相對有意義的域名。域名有一定的結構,一般形式如下:主機名.組織名.組織類型名.頂級域名2024/12/24李飛——東北大學秦皇島分校計算中心3/35網絡編程基本知識Socket。Socket通常被稱作“套接字”,它是一個通信鏈的句柄,用于處理數(shù)據(jù)的接收與發(fā)送。端口。在網絡通信過程中,IP地址和端口號為應用程序提供了一種確定的地址標識,IP地址標識Internet上的計算機,而端口號表明將數(shù)據(jù)包發(fā)送給目的計算機上哪個應用程序。每個Socket都有其對應的端口號,端口號是一個16位的二進制整數(shù),其范圍為0~65535,其中0~1023為系統(tǒng)所保留,專門用于那些通用的網絡服務服務器和客戶機。在網絡中,為其他計算機提供數(shù)據(jù)、信息或服務的計算機被稱為服務器。使用其他計算機的數(shù)據(jù)、信息或服務的計算機被稱為客戶機。2024/12/24李飛——東北大學秦皇島分校計算中心4/35與網絡編程相關的類2024/12/24李飛——東北大學秦皇島分校計算中心5/35DatagramPacketDatagramSocketInetAddressInet4AddressInet6AddressServerSocketSocketURLURLConnectionHttpURLConnectionURLEncoder常見的網絡編程模式URL通信模式。利用URL類和URLConnection類進行網絡上數(shù)據(jù)信息的輸入和輸出,面向應用層協(xié)議編程。Socket通信模式。利用ServerSocket和Scoket類,通過傳輸層的TCP協(xié)議,實現(xiàn)網絡上兩個節(jié)點之間的通信。Datagram通信模式。使用DatagramSocket、DatagramPacket、MulticastSocket類,面向傳輸層的UDP協(xié)議編程,實現(xiàn)通信。2024/12/24李飛——東北大學秦皇島分校計算中心6/35URL編程URL格式協(xié)議名://主機名[:端口號[路徑/文件名]]協(xié)議名:指明獲得資源所使用的傳輸協(xié)議,如http、ftp、file、gopher等。主機名:指文件所在的計算機的域名或IP地址,如。端口號:指提供服務的應用所提供的訪問端口,例如http服務端口默認為80,F(xiàn)TP服務的默認端口為21。2024/12/24李飛——東北大學秦皇島分校計算中心7/35路徑/文件名:指資源在主機上的路徑和文件名組成的一個內部引用。如URL地址/2017/12/09/VIDEkA16AVXeFxGucgx7bwjw171209.shtml中的“路徑/文件名”是“/2017/12/09/VIDEkA16AVXeFxGucgx7bwjw171209.shtml”說明文件“VIDEkA16AVXeFxGucgx7bwjw171209.shtml”保存在主機根目錄下的“/2017/12/09”路徑下。在Java中我們通常把“路徑+文件名“統(tǒng)稱為文件名。2024/12/24李飛——東北大學秦皇島分校計算中心8/35InetAddress類
InetAddress類是個抽象類,提供將主機名解析為其IP地址(或反之)的方法。InetAddress類沒有構造方法,要創(chuàng)建InetAddress類的實例對象,通??梢允褂肐netAddress類的靜態(tài)方法來構造。如使用如下語句創(chuàng)建一個InetAddress實例。byte[]addr={118,16,92,12};InetAddressinteradd=InetAddress.getByAddress(addr);2024/12/24李飛——東北大學秦皇島分校計算中心9/35InteAddress類的類方法方法說明getAllByName(Stringhost)在給定主機名的情況下,根據(jù)系統(tǒng)配置的名稱服務返回其IP地址所組成的數(shù)組。getByAddress(byte[]addr)根據(jù)IP地址創(chuàng)建InetAddress對象。getByAddress(Stringhost,byte[]addr)根據(jù)主機名和IP地址創(chuàng)建InetAddress。getByName(Stringhost)根據(jù)主機確定主機的InteAddress。getLocalHost()返回本地主機的InteAddress。2024/12/24李飛——東北大學秦皇島分校計算中心10/35InteAddress類的常用成員方法方法說明getAddress()返回此InetAddress對象的原始IP地址。getCanonicalHostName()獲取此IP地址的完全限定域名。getHostAddress()返回IP地址字符串(以文本表現(xiàn)形式)。getHostName()獲取此IP地址的主機名。getLocalHost()返回本地主機。toString()將此IP地址轉換為String。2024/12/24李飛——東北大學秦皇島分校計算中心11/35例13.1:判定192.168.1網段中哪些計算機是活動的。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+"的主機名稱是:"+hostname);
} }catch(IOExceptione){e.printStackTrace();}
}}}2024/12/24李飛——東北大學秦皇島分校計算中心12/35URL類URL類的常用構造方法2024/12/24李飛——東北大學秦皇島分校計算中心13/35方法說明URL(Stringspec)根據(jù)String表示形式創(chuàng)建URL對象。URL(Stringprotocol,Stringhost,intport,Stringfile)根據(jù)協(xié)議名、主機名、端口號和文件名創(chuàng)建URL對象。URL(Stringprotocol,Stringhost,Stringfile)根據(jù)協(xié)議名稱、主機名稱和文件名稱創(chuàng)建URL。URL(URLcontext,Stringspec)通過給定的spec對指定的上下文解析創(chuàng)建URL。因為URL表示的網絡資源,在Internet上并不一定存在,所以使用URL構造方法創(chuàng)建URL對象時,除URL(Stringspec)方法外,其他的構造方法都會產生一個.MalformedURLException的異常對象,所以在使用其他構造方法時要注意對該異常的進行處理。2024/12/24李飛——東北大學秦皇島分校計算中心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李飛——東北大學秦皇島分校計算中心15/35URL類的常用實例方法(例13.2)方法說明getContent()獲取URL的內容。getDefaultPort()獲取與URL關聯(lián)協(xié)議的默認端口號。getFile()獲取URL的文件名。getHost()獲取URL的主機名。getPath()獲取URL的路徑部分。getPort()獲取URL的端口號。getProtocol()獲取URL的協(xié)議名稱。getQuery()獲取URL的查詢部分。toURI()返回與URL等效的URI。toString()構造URL的字符串表示形式。openStream()打開到URL的連接并返回一個用于從該連接讀入的InputStream。openConnection()返回一個URLConnection對象,它表示到URL所引用的遠程對象的連接。openConnection(Proxyproxy)與openConnection()類似,所不同是連接通過指定的代理建立;不支持代理方式的協(xié)議處理程序將忽略該代理參數(shù)并建立正常的連接。set(Stringprotocol,Stringhost,intport,Stringfile,Stringref)設置URL的字段。protocol是協(xié)議名,host是主機名,port是端口號,file是資源文名,ref是URL中的內部引用名。2024/12/24李飛——東北大學秦皇島分校計算中心16/35URLConnection類使用URLConnection對象的一般方法如下:1)創(chuàng)建一個URL對象。2)調用URL對象的openConnection()方法創(chuàng)建這個URL的URLConnection對象。3)配置URLConnection。4)讀首部字段。5)獲取輸入流并讀數(shù)據(jù)。6)獲取輸出流并寫數(shù)據(jù)。7)關閉連接。2024/12/24李飛——東北大學秦皇島分校計算中心17/35URLConnection類的常用方法(例13.3)方法說明getContentType()獲取文件類型。getContentLength()獲取文件長度。getDate()獲取文件創(chuàng)建時間。getLastModified()獲取文件最后修改時間。getExpiration()獲取文件過期時間。getURL()獲取連接的URL。getContent()獲取連接的內容。getInputStream()獲取連接的輸入流getOutputStream()獲取連接的輸出流2024/12/24李飛——東北大學秦皇島分校計算中心18/35socket編程用Socket實現(xiàn)通信的S/C模型2024/12/24李飛——東北大學秦皇島分校計算中心19/35Socket構造方法創(chuàng)建未連接套接字。Socket()創(chuàng)建一個連接到指定IP地址和端口的套接字。Socket(InetAddressaddress,intport) 創(chuàng)建一個連接到指定地址上的指定端口的套接字。Socket(InetAddressaddress,intport,InetAddresslocalAddr,intlocalPort)創(chuàng)建一個指定主機和端口號的套接字。Socket(Stringhost,intport)創(chuàng)建一個指定遠程主機上的指定遠程端口的套接字。Socket(Stringhost,intport,InetAddresslocalAddr,intlocalPort)2024/12/24李飛——東北大學秦皇島分校計算中心20/35Socket類的常用實例方法bind(SocketAddressbindpoint)將套接字綁定到本地地址。getInetAddress()返回套接字連接的地址。getPort()返回套接字連接到的遠程端口。getLocalPort()返回套接字綁定到的本地端口。getLocalAddress()獲取套接字綁定的本地地址。getInputStream()返回套接字的輸入流。getOutputStream()返回套接字的輸出流。connect(SocketAddressendpoint)將套接字連接到服務器。connect(SocketAddressendpoint,inttimeout)將套接字連接到服務器,并指定一個超時值。close()關閉套接字。2024/12/24李飛——東北大學秦皇島分校計算中心21/35舉例例13.4:編寫一個端口掃描器程序,探測一臺主機中開放的端口。解析:我們首先定義一個構造方法用于設置被掃描的主機,然后定義一個start()方法完成掃描操作。在start()方法中首先建立一個產生端口號的循環(huán),在循環(huán)中為每個端口號創(chuàng)建端口對象,如果能夠成功建立,則說明這個端口開放,如果拋出異常UnknownHostException則說明本機無法識別目標主機,如果拋出異常IOException說明該端口未開放。代碼見教材例13.42024/12/24李飛——東北大學秦皇島分校計算中心22/35ServerSocket類利用ServerSocket可以開發(fā)服務器程序。ServerSocket類包含了實現(xiàn)一個服務器要求的所用功能。ServerSocket類的工作流程
在指定的監(jiān)聽端口創(chuàng)建一個ServerSocket類的對象S。調用對象S的accept()方法在指定的端口監(jiān)聽到來的連接,并通過accept()獲取連接客戶端與服務器的Socket對象。調用getInputStream()方法和getOutputStream()方法獲得Socket對象的輸入流和輸出流。服務器與客戶端根據(jù)一定的協(xié)議交互數(shù)據(jù),直到一端請求關閉連接。服務器和客戶端關閉連接。服務器回到第2步,繼續(xù)監(jiān)聽下一次的連接,而客戶端運行結束。2024/12/24李飛——東北大學秦皇島分校計算中心23/35ServerSocket類的常用構造方法2024/12/24李飛——東北大學秦皇島分校計算中心24/35ServerSocket()創(chuàng)建非綁定服務器套接字。ServerSocket(intport)創(chuàng)建一個綁定到指定端口的服務器套接字。ServerSocket(intport,intbacklog)創(chuàng)建服務器套接字,將其綁定到指定的本地端口號,并指定傳入連接隊列長度為backlog。ServerSocket(intport,intbacklog,InetAddressbindAddr)創(chuàng)建服務器套接字,指定其端口、連接隊列長度backlog和綁定的服務器IP地址ServerSocket類的常用實例方法方法說明accept()偵聽并接受到此套接字的連接。bind(SocketAddressendpoint)將ServerSocket綁定到特定地址(IP地址和端口號)。bind(SocketAddressendpoint,intbacklog)設定偵聽隊列長度backlog且將ServerSocket綁定到特定地址。close()關閉套接字。getInetAddress()返回服務器套接字的本地地址。getLocalPort()返回套接字在其上偵聽的端口。getLocalSocketAddress()返回套接字綁定的端點的地址,如果尚未綁定則返回null。2024/12/24李飛——東北大學秦皇島分校計算中心25/35例13.6用ServerSocket實現(xiàn)時間服務器。importjava.io.*;import.*;importjava.util.*;publicclasseg13_6implementsRunnable{ intport; publiceg13_6(){ this(37);//設置時間服務器端口 } publiceg13_6(intport){ this.port=port; }2024/12/24李飛——東北大學秦皇島分校計算中心26/35publicvoidrun(){ try{
//創(chuàng)建服務器套接字 ServerSocketserver=newServerSocket(port); while(true){//輪流處理多個客戶端請求 Socketconn=null; try{conn=server.accept();//等待客戶端請求
Datenow=newDate();//生成系統(tǒng)時間
longnetTime=now.getTime()/1000+2208988800L;
byte[]time=newbyte[4];
for(inti=0;i<4;i++){
time[3-i]=(byte)(netTime&0x00000000000000FFL);
netTime>>=8; }//獲取套接
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年全國計算機二級等級考試全真模擬試卷及答案(共七套卷)
- 2021廣東省中考物理模擬題分章節(jié)匯編 第五章 透鏡成像及應用(學生版+解析版)
- 2016人教版七年級英語上冊測試題(27份含答案)
- 2024年07月浙江浙江泰隆商業(yè)銀行社會招考(731)筆試歷年參考題庫附帶答案詳解
- 2024年07月浙江招商銀行寧波分行實習生招考(76)筆試歷年參考題庫附帶答案詳解
- 2024年海口廣安醫(yī)療綜合門診部高層次衛(wèi)技人才招聘筆試歷年參考題庫頻考點附帶答案
- 2024年海南美容整形醫(yī)院高層次衛(wèi)技人才招聘筆試歷年參考題庫頻考點附帶答案
- 全國浙教版信息技術高中選修1新授課 第一節(jié) 基本數(shù)據(jù)類型、常量和變量 說課稿
- 大學生大骨干培訓結業(yè)展示
- 2024年江西中醫(yī)學院第三附屬醫(yī)院鷹潭市中醫(yī)院高層次衛(wèi)技人才招聘筆試歷年參考題庫頻考點附帶答案
- 2025年生活飲用水監(jiān)督檢查工作計劃
- Unit 3 My School Section B 1a-1d 教學實錄 2024-2025學年人教版七年級上冊英語
- LINUX網絡操作系統(tǒng)知到智慧樹章節(jié)測試課后答案2024年秋湖北交通職業(yè)技術學院
- 河北省邯鄲市2023-2024學年高一上學期期末質量檢測地理試題 附答案
- 醫(yī)療機構競業(yè)限制協(xié)議
- 2024年度物業(yè)管理公司員工獎懲制度3篇
- 【MOOC】藥理學-華中科技大學 中國大學慕課MOOC答案
- 交通疏導安全教育培訓
- 腦卒中抗血小板治療
- 機器人操作系統(tǒng)ROS原理及應用 課件 07 ROS簡介
- 2025重癥醫(yī)學科護理工作計劃
評論
0/150
提交評論