




版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
第十四章網(wǎng)絡通信遼寧機電職業(yè)技術學院信息工程系軟件教研室遲勇回顧補充代碼完成:publicclassDigitalClockextendsAppletimplements_____________
{ Threadrunner;//定義線程類實例 publicvoidstart() { if(runner==null) { runner=newThread(this);//初始化線程類實例,并指明target對象this runner.
();//線程就緒,獲得CPU運行調(diào)度后,將開始運行run()方法
} } publicvoid
(){……}//run()方法定義在實現(xiàn)Runnable接口的類中}Runnablestartrun本章學習任務使用URL類獲取網(wǎng)絡信息獲取Internet和本地主機地址使用ServerSocket類和Socket類實現(xiàn)簡單聊天室使用DatagramSocket類和DatagramPacket類實現(xiàn)客戶端與服務器端通信本章技能目標了解網(wǎng)絡通信的基本協(xié)議了解URL類的作用使用Socket類和ServerSocket類編寫通信程序使用DatagramSocket類和DatagramPacket類編寫通信程序預習檢查(1)--預習新單詞單詞釋義單詞釋義LANWANTCPUDPURLSocketDatagramprotocol預習檢查(2)TCP與UDP協(xié)議區(qū)別?使用Socket類和ServerSocket類編寫通信程序,創(chuàng)建對象的語法格式是?網(wǎng)絡通信-內(nèi)容目錄網(wǎng)絡基本概念URL使用Socket類和ServerSocket類編寫通信程序DatagramSocket類和DatagramPacket類局域網(wǎng)(LAN)與廣域網(wǎng)(WAN)網(wǎng)絡大致可分為局域網(wǎng)(LocalAreaNetWork)和廣域網(wǎng)(WideAreaNetWork)兩種。局域網(wǎng)通常是指通過網(wǎng)卡和網(wǎng)線將一個網(wǎng)段內(nèi)的所有計算機連接在一起的網(wǎng)絡,由于幾乎不計網(wǎng)絡帶寬或流量,因此它具有訪問簡便,速度快捷的特點。廣域網(wǎng)現(xiàn)在特指Internet,就是世界上的個人計算機或局部網(wǎng)絡通過電話線或?qū)>€連接的世界性網(wǎng)絡。
域名與IP地址
1.IP地址
IP地址即InternetProtocal地址,它用于在網(wǎng)絡上唯一標識每一臺計算機。就像我們的家庭電話都有一個唯一號碼一樣,IP地址由4組8位的二進制數(shù)(共32位)組成,例如:11000000101010000000000000000001
因為32位二進數(shù)不利于書寫和記憶,因此采用四組十進制數(shù)表示,例如上面的二進制數(shù)字可轉(zhuǎn)換為:
域名與IP地址
2.域名由于IP地址仍不利于記憶,因此實際應用中經(jīng)常使用域名來代替IP地址標識網(wǎng)絡主機在網(wǎng)絡上的位置。例如:,等,當用戶通過域名訪問網(wǎng)絡站點時,域名服務器將域名解析成IP地址,再通過IP地址訪問站點主機。域名也是唯一的,需要在網(wǎng)絡域名提供商那里注冊得到。原則上域名與IP地址是一一對應的關系,但通過對服務器的特殊設置也可以實現(xiàn)多個域名對應一個IP地址,即在一臺服務器上設置多個站點。14.1.3網(wǎng)絡協(xié)議在Internet上的各種計算機系統(tǒng)平臺之間需要相互通信,但是各個系統(tǒng)的內(nèi)碼和所能識別的數(shù)據(jù)規(guī)則不同,就像一位中國人和一位法國人在一起交談時需要一位了解漢語和法語的翻譯一樣,各個系統(tǒng)之間相互通信需要共同遵守一定的規(guī)則,這些規(guī)則就是協(xié)議。協(xié)議是網(wǎng)絡的通用語言,它是網(wǎng)絡中傳遞、管理信息的一些規(guī)范。常見的協(xié)議有:TCP/IP協(xié)議、IPX/SPX協(xié)議、NetBIOS、HTTP協(xié)議等等。TCP和UDP本章示例中涉及的協(xié)議主要為TCP和UDP:TCP(傳輸控制協(xié)議:TransportControlProtocol):是面向連接的協(xié)議,通過校驗保證傳輸數(shù)據(jù)包的可靠性,發(fā)送方和接收方的socket(套接字)必須建立連接,然后才可以通信;Java中的URL,Socket,ServerSocket等類使用TCP協(xié)議通信。UDP(用戶數(shù)據(jù)報協(xié)議:UserDatagramProtocol):是非面向連接的協(xié)議,傳輸數(shù)據(jù)時不附加可靠性驗證,每個數(shù)據(jù)報都包括完整的源地址和目的地址,數(shù)據(jù)報在網(wǎng)絡上可能以任何路徑傳往目的地;DatagramPacket,DatagramSocket等類使用UDP協(xié)議通信。選擇協(xié)議的時機既然TCP和UDP都可以進行網(wǎng)絡通信,那么實際應用中究竟如何選擇呢?它們的選擇時機如下:由于UDP的數(shù)據(jù)報中包含了完整的地址,因此無需發(fā)送方和接收方進行連接;而TCP是面向連接的協(xié)議,在scoket之間傳輸數(shù)據(jù)時必須進行連接,另外可靠性校驗也會占用一定的網(wǎng)絡帶寬,因此需要較多處理時間和系統(tǒng)資源;UDP的數(shù)據(jù)報大小是有限制的,每個數(shù)據(jù)報理論上不大于64KB,但數(shù)據(jù)區(qū)往往只有1472字節(jié),因此往往需要大量傳送數(shù)據(jù)報,而UDP又是一個非面向連接,不可靠的協(xié)議,因此使用它時網(wǎng)絡安全性要求要比較高,如局域網(wǎng)C/S構架的應用程序;TCP適用于那種需要可靠傳送且長度不定的數(shù)據(jù)的情況。常見的網(wǎng)絡服務與其端口號常見的網(wǎng)絡服務有http、ftp、pop、smtp、telnet等(它們的功能請參看表14-1),為了在一臺服務器上安裝多個服務,我們引入了端口(port)的概念。如果把IP地址比作一間房子,端口就是出入這間房子的門。端口號的范圍從0到65535。按端口號號碼范圍來劃分,0~1023端口號為系統(tǒng)保留,固定分配給一些服務,自行設定端口號時要選取大于5000的端口號。按協(xié)議類型劃分可以分為TCP、UDP、IP和ICMP(Internet控制消息協(xié)議)等類型的端口。常見的網(wǎng)絡服務與其端口號TCP類型端口:即傳輸控制協(xié)議端口,需要在客戶端和服務器之間建立連接,這樣可以提供可靠的數(shù)據(jù)傳輸。如FTP服務的21端口,HTTP服務的80端口等等。UDP類型端口:即用戶數(shù)據(jù)報協(xié)議端口,無需在客戶端和服務器之間建立連接,可靠性得不到保障。常見的有DNS服務的53端口,QQ使用的8000和4000端口等等。每個服務都占用一個端口,默認時每個服務有自己特定的端口號,除非特意改變它們常用網(wǎng)絡服務及對應的端口號表14-1常用網(wǎng)絡服務及端口號網(wǎng)絡服務對應端口號http,超文本傳輸服務80ftp,文件傳輸服務21telnet,登錄遠程服務器23smtp,簡單郵件傳輸服務25pop,將郵件存儲在遠程郵件服務器上109常用網(wǎng)絡服務及對應的端口號另外,一些安裝到系統(tǒng)平臺的Web服務器軟件和數(shù)據(jù)庫管理系統(tǒng)軟件在啟動時也會占用一些固定端口,如MSSQLServer默認占用1433端口,ApacheTomcat默認占用8080端口,BEAWeblogic默認占用7001端口等。ApacheTomcat和BEAWeblogic都是現(xiàn)今比較流行的JSP引擎,主要用于基于JSP技術開發(fā)的站點,JSP(JavaServerPages)應是讀者在后繼的學習中要接觸到的知識。SQLServer是微軟公司開發(fā)的操作簡便但功能強大的數(shù)據(jù)庫管理系統(tǒng),在本書的最后一章中我們會學習到關于它基本的訪問和使用網(wǎng)絡通信-內(nèi)容目錄網(wǎng)絡基本概念URL使用Socket類和ServerSocket類編寫通信程序DatagramSocket類和DatagramPacket類URL類
URL(UniformResourceLocator)是統(tǒng)一資源定位器的簡稱,它可以用來標識網(wǎng)絡資源的地址。URL的組成:
一個URL包括兩個部分:協(xié)議名和資源名,中間用冒號隔開,例如:協(xié)議名:資源名其中協(xié)議名由前面14.2.1節(jié)的網(wǎng)絡服務名指定。資源名即資源的完整地址,包括主機名、端口號、目錄或文件名等內(nèi)容。下面是幾個URL地址示例:
/tom/index.html#chapter1:21/pic
Java中的URL類包中的URL類實現(xiàn)了Java對URL的應用,它的常用構造方法如下:1.URL(Stringspec);根據(jù)字符串表示形式創(chuàng)建URL對象。例如:URLcsdn_url=newURL(“:21/pic”);2.URL(Stringprotocol,Stringhost,intport,Stringfile);根據(jù)指定的協(xié)議、主機名、端口號和文件名創(chuàng)建URL對象。例如:URLcsdn_url=newURL(“ftp”,“”,21,“pic”);
Java中的URL類3.URL(URLcontext,Stringspec);通過在指定的上下文中對給定的字符串進行解析創(chuàng)建URL對象。例如:URLcsdn_url=newURL(“:21/pic”); URLindex_url=newURL(csdn_url,“index.html”);注意:構造URL對象時,如果指定了錯誤的協(xié)議,會拋出MalformedURLException異常。
URL類常用方法URL類的方法說明int
getDefaultPort()獲得與此URL關聯(lián)協(xié)議的默認端口號StringgetFile()獲得此URL的文件名StringgetHost()獲得此URL的主機名StringgetPath()獲得此URL的路徑部分int
getPort()獲得此URL的端口號StringgetProtocol()獲得此URL的協(xié)議名稱表14-2URL類常用方法例14-1:獲取URL類屬性信息import.*;publicclassGetURLInfo{publicstaticvoidmain(String[]args)throwsMalformedURLException{ URLurl=newURL("/"); URLpageUrl=newURL(url,"download/index.jsp"); System.out.println("協(xié)議關聯(lián)端口:"+pageUrl.getDefaultPort()); System.out.println("站點文件名:"+pageUrl.getFile()); System.out.println("站點主機:"+pageUrl.getHost()); System.out.println("使用協(xié)議:"+pageUrl.getProtocol());}}14.2.3使用InetAddress類獲取主機地址網(wǎng)絡上的主機地址有兩種表示形式:域名方式:IP地址方式:34使用包中的InetAddress類,可以獲取這兩種地址。
1.獲取Internet上主機地址使用InetAddress類的getByNames(Strings)靜態(tài)方法可以根據(jù)域名字符串獲得InetAddress對象,該對象包含有該參數(shù)的“域名形式”和“IP地址形式”的值對。例如可以輸入域名“”得到值對“/32”。另外,InetAddress類還有兩個方法用以從InetAddress對象的值對中獲取“域名形式”或“IP地址形式”。publicStringgetHostName();獲取InetAddress對象的域名形式publicStringgetHostAddress();獲取InetAddress對象的IP地址形式2.獲取本地機地址:使用InetAddress類的getLocalHost()靜態(tài)方法可以獲得本地機InetAddress對象,該對象包含有本機的域名和IP地址。import.*;publicclassGetAddress{publicstaticvoidmain(String[]args){ try{ InetAddressaddress01=InetAddress.getByName(""); System.out.println(address01.toString());//輸出Internet站點的域名/IP地址
System.out.println(address01.getHostName());//輸出域名
System.out.println(address01.getHostAddress());//輸出IP地址例14-2:獲取Internet和本地主機地址InetAddressaddress02=InetAddress.getLocalHost();//輸出本地機域名/IP地址 System.out.println(address02.toString()); System.out.println(address02.getHostName()); System.out.println(address02.getHostAddress()); } catch(UnknownHostExceptionex){ }}}網(wǎng)絡通信-內(nèi)容目錄網(wǎng)絡基本概念URL使用Socket類和ServerSocket類編寫通信程序DatagramSocket類和DatagramPacket類Java的網(wǎng)絡API類庫是典型的基于TCP/IP通訊的網(wǎng)絡類庫,程序之間依靠Socket進行通訊。我們可以把Socket看成是在兩個程序進行通訊連接中的一個端點(比如電源的一個插座),一個程序先將一段信息寫入Socket中,然后該Socket將這段信息發(fā)送給另外一個Socket,使這段信息能傳送到那個程序中?!疤捉幼帧保⊿ocket)也是一種軟件形式的抽象,用于表達兩臺機器間一個連接的“終端”。針對一個特定的連接,每臺機器上都有一個“套接字”,可以想象它們之間有一條虛擬的“線纜”。線纜的每一端都插入一個“套接字”或稱“插座”里。當兩臺機器都建立了Socket,并連接完畢就可以通信了。什么是socket?兩個基于數(shù)據(jù)流的套接字類從套接字得到的結果是一個InputStream以及OutputStream(若使用恰當?shù)霓D(zhuǎn)換器,則分別是Reader和Writer),以便將連接作為一個IO流對象對待。有兩個基于數(shù)據(jù)流的套接字類:ServerSocket,服務器用它“偵聽”進入的連接;Socket,客戶用它初始一次連接。運行過程
注意:“ServerSocket”這個命名有不恰當?shù)牡胤剑驗樗淖饔貌皇钦娴某蔀橐粋€Socket,而是在其它Socket同它連接的時候產(chǎn)生一個Socket對象。所以,程序的運行過程應該是這樣的:1)創(chuàng)建服務器端ServerSocket對象和客戶端Socket對象,建立連接;2)建立信息,以流的形式連接到Socket;3)讀寫操作;4)關閉Socket。創(chuàng)建ScoketSocket類的常用構造方法如下:Socket(InetAddressaddress,intport);創(chuàng)建一個流套接字并將其連接到指定IP地址的指定端口號。ServerSocket類的常用構造方法如下:ServerSocket(intport);創(chuàng)建綁定到特定端口的服務器套接字。例如:創(chuàng)建客戶端的Socket對象,并設定端口號為2000,格式為:SocketclientSocket=newSocket("",2000);創(chuàng)建服務器端的ServerSocket對象,格式為:ServerSocketserverSocket=newServerSocket(2000);14.3.3創(chuàng)建輸入/輸出流
ServerSocket類與Socket類都提供了getInputStream()和getOutputStream()方法來得到對應的輸入/輸出流,這兩個方法分別返回InputStream和OutputStream類的對象。為了提高輸入/輸出效率,可以再套接過濾流,如DataInputStream和DataOutputStream類用于處理數(shù)字,InputStreamReader和OutputStreamWriter,PrintWriter等類用于處理文本。例14-3:簡單聊天室示例(主要代碼)例14-3:服務器端程序TalkServer類(TalkServer.java程序代碼)/*建立服務器端ServerSocket對象*/serverSocket=newServerSocket(2000);System.out.println("等待客戶端的連接...");clientSocket=serverSocket.accept();//接收來自客戶端的Socketbr=newBufferedReader(newInputStreamReader(clientSocket.getInputStream()));System.out.println("來自客戶端的信息是:"+br.readLine());TalkServer.java程序代碼
(主要代碼)/*建立接收本地服務器控制臺的輸入信息的輸入流對象server_br*/BufferedReaderserver_br=newBufferedReader( newInputStreamReader(System.in));//接收來自客戶端信息Stringserver_info=server_br.readLine();/*建立向客戶端寫出信息的輸出流對象pw*/pw=newPrintWriter(newOutputStreamWriter(clientSocket.getOutputStream));//接收本地服務器控制臺的輸入信息while(!server_info.equals("bye")){ pw.println(server_info);//把信息傳給客戶端客戶端程序Talk類(主要代碼)SocketclientSocket=newSocket("",2000);//建立客戶端的Socket/*建立接收服務器端信息的輸入流對象br*/BufferedReaderbr=newBufferedReader(newInputStreamReader(clientSocket.getInputStream()));/*建立向服務器端寫出信息的輸出流對象pw*/PrintWriterpw=newPrintWriter(newOutputStreamWriter( clientSocket.getOutputStream));/*建立接收本地客戶端控制臺的輸入信息的輸入流對象client_br*/BufferedReaderclient_br=newBufferedReader( newInputStreamReader(System.in));
Talk.java程序代碼(主要代碼)System.out.println(“聊天客戶端已經(jīng)啟動...”);Stringclient_info=client_br.readLine();//本地客戶端控制臺的輸入信息System.out.println(“您輸出的信息是:”+client_info);while(!client_info.equals("bye")){//客戶端控制臺輸入"bye"時程序結束 pw.println(client_info);//把信息傳給服務器端…運行步驟2)3)1)編譯好兩個源程序,先啟動TalkServer類,再啟動Talk類;在客戶端程序控制臺窗口中輸入“你好,管理員”,在服務器端窗口中會看到此信息;當在兩個窗口中輸入“bye”時,程序退出。【運行步驟】運行結果網(wǎng)絡通信-內(nèi)容目錄網(wǎng)絡基本概念URL使用Socket類和ServerSocket類編寫通信程序DatagramSocket類和DatagramPacket類14.4創(chuàng)建、接收與發(fā)送數(shù)據(jù)報需要從多個路徑收集多種數(shù)據(jù),且對可靠性要求并不嚴格,這時就可以考慮使用基于UDP協(xié)議的通信方式。另外,UDP也可以實現(xiàn)組播方式通信。包提供了DatagramSocket類和DatagramPacket類用來支持數(shù)據(jù)報通信,其中DatagramPacket類用于建立數(shù)據(jù)報包,DatagramSocket類用于在程序之間建立數(shù)據(jù)報的通信連接。在數(shù)據(jù)報通信時,客戶端與服務器端都要先建立DatagramSocket對象以進行連接,然后就可以接收或發(fā)送數(shù)據(jù)報包。DatagramSocket類常用構造方法DatagramSocket類常用構造方法:DatagramSocket(intport)
創(chuàng)建數(shù)據(jù)報套接字并將其綁定到本地主機上的指定端口。DatagramSocket(intport,InetAddressladdr)
創(chuàng)建數(shù)據(jù)報套接字,將其綁定到指定的本地地址。DatagramPacket類常用構造方法DatagramPacket類常用構造方法:(其中buf數(shù)組用以存放數(shù)據(jù)報數(shù)據(jù))DatagramPacket(byte[]buf,intlength)
構造DatagramPacket,用來接收長度為length的數(shù)據(jù)包。DatagramPacket(byte[]buf,intoffset,intlength)構造DatagramPacket,用來接收長度為length的包,并指定緩沖區(qū)偏移量DatagramPacket(byte[]buf,
溫馨提示
- 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. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 銅冶煉過程中的環(huán)保設備研發(fā)進展預測分析研究考核試卷
- 金屬加工中的金屬加工設備維護管理信息系統(tǒng)考核試卷
- 礦石催化反應與催化機理考核試卷
- 銀冶煉中的冶煉廠智能化改造與生產(chǎn)調(diào)度考核試卷
- 針織品生產(chǎn)計劃與優(yōu)化考核試卷
- 外科縫合穿針教學
- 口腔護士職業(yè)實踐心得
- 麻醉科每月醫(yī)療質(zhì)量控制
- 冷菜制作的衛(wèi)生與安全
- 妊娠高血壓疾病查房要點
- 鋁粉加工合同協(xié)議書
- 大學語文試題及答案安徽
- 近七年寧夏中考化學真題及答案2024
- 2025至2030中國芳綸纖維行業(yè)需求預測及發(fā)展前景趨勢研究報告
- 十一學校小升初入學測試數(shù)學真題及詳細解答
- Braden 壓力性損傷評分表詳解
- 婚內(nèi)賭博欠債協(xié)議書范本
- 造價咨詢項目管理制度
- 徐圩港區(qū)疏港航道整治工程報告書
- XX公司事故隱患內(nèi)部報告獎勵制度1
- 兒童重癥肺炎護理常規(guī)
評論
0/150
提交評論