




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第十四章網絡通信遼寧機電職業技術學院信息工程系軟件教研室遲勇回顧補充代碼完成:publicclassDigitalClockextendsAppletimplements_____________
{ Threadrunner;//定義線程類實例 publicvoidstart() { if(runner==null) { runner=newThread(this);//初始化線程類實例,并指明target對象this runner.
();//線程就緒,獲得CPU運行調度后,將開始運行run()方法
} } publicvoid
(){……}//run()方法定義在實現Runnable接口的類中}Runnablestartrun本章學習任務使用URL類獲取網絡信息獲取Internet和本地主機地址使用ServerSocket類和Socket類實現簡單聊天室使用DatagramSocket類和DatagramPacket類實現客戶端與服務器端通信本章技能目標了解網絡通信的基本協議了解URL類的作用使用Socket類和ServerSocket類編寫通信程序使用DatagramSocket類和DatagramPacket類編寫通信程序預習檢查(1)--預習新單詞單詞釋義單詞釋義LANWANTCPUDPURLSocketDatagramprotocol預習檢查(2)TCP與UDP協議區別?使用Socket類和ServerSocket類編寫通信程序,創建對象的語法格式是?網絡通信-內容目錄網絡基本概念URL使用Socket類和ServerSocket類編寫通信程序DatagramSocket類和DatagramPacket類局域網(LAN)與廣域網(WAN)網絡大致可分為局域網(LocalAreaNetWork)和廣域網(WideAreaNetWork)兩種。局域網通常是指通過網卡和網線將一個網段內的所有計算機連接在一起的網絡,由于幾乎不計網絡帶寬或流量,因此它具有訪問簡便,速度快捷的特點。廣域網現在特指Internet,就是世界上的個人計算機或局部網絡通過電話線或專線連接的世界性網絡。
域名與IP地址
1.IP地址
IP地址即InternetProtocal地址,它用于在網絡上唯一標識每一臺計算機。就像我們的家庭電話都有一個唯一號碼一樣,IP地址由4組8位的二進制數(共32位)組成,例如:11000000101010000000000000000001
因為32位二進數不利于書寫和記憶,因此采用四組十進制數表示,例如上面的二進制數字可轉換為:
域名與IP地址
2.域名由于IP地址仍不利于記憶,因此實際應用中經常使用域名來代替IP地址標識網絡主機在網絡上的位置。例如:,等,當用戶通過域名訪問網絡站點時,域名服務器將域名解析成IP地址,再通過IP地址訪問站點主機。域名也是唯一的,需要在網絡域名提供商那里注冊得到。原則上域名與IP地址是一一對應的關系,但通過對服務器的特殊設置也可以實現多個域名對應一個IP地址,即在一臺服務器上設置多個站點。14.1.3網絡協議在Internet上的各種計算機系統平臺之間需要相互通信,但是各個系統的內碼和所能識別的數據規則不同,就像一位中國人和一位法國人在一起交談時需要一位了解漢語和法語的翻譯一樣,各個系統之間相互通信需要共同遵守一定的規則,這些規則就是協議。協議是網絡的通用語言,它是網絡中傳遞、管理信息的一些規范。常見的協議有:TCP/IP協議、IPX/SPX協議、NetBIOS、HTTP協議等等。TCP和UDP本章示例中涉及的協議主要為TCP和UDP:TCP(傳輸控制協議:TransportControlProtocol):是面向連接的協議,通過校驗保證傳輸數據包的可靠性,發送方和接收方的socket(套接字)必須建立連接,然后才可以通信;Java中的URL,Socket,ServerSocket等類使用TCP協議通信。UDP(用戶數據報協議:UserDatagramProtocol):是非面向連接的協議,傳輸數據時不附加可靠性驗證,每個數據報都包括完整的源地址和目的地址,數據報在網絡上可能以任何路徑傳往目的地;DatagramPacket,DatagramSocket等類使用UDP協議通信。選擇協議的時機既然TCP和UDP都可以進行網絡通信,那么實際應用中究竟如何選擇呢?它們的選擇時機如下:由于UDP的數據報中包含了完整的地址,因此無需發送方和接收方進行連接;而TCP是面向連接的協議,在scoket之間傳輸數據時必須進行連接,另外可靠性校驗也會占用一定的網絡帶寬,因此需要較多處理時間和系統資源;UDP的數據報大小是有限制的,每個數據報理論上不大于64KB,但數據區往往只有1472字節,因此往往需要大量傳送數據報,而UDP又是一個非面向連接,不可靠的協議,因此使用它時網絡安全性要求要比較高,如局域網C/S構架的應用程序;TCP適用于那種需要可靠傳送且長度不定的數據的情況。常見的網絡服務與其端口號常見的網絡服務有http、ftp、pop、smtp、telnet等(它們的功能請參看表14-1),為了在一臺服務器上安裝多個服務,我們引入了端口(port)的概念。如果把IP地址比作一間房子,端口就是出入這間房子的門。端口號的范圍從0到65535。按端口號號碼范圍來劃分,0~1023端口號為系統保留,固定分配給一些服務,自行設定端口號時要選取大于5000的端口號。按協議類型劃分可以分為TCP、UDP、IP和ICMP(Internet控制消息協議)等類型的端口。常見的網絡服務與其端口號TCP類型端口:即傳輸控制協議端口,需要在客戶端和服務器之間建立連接,這樣可以提供可靠的數據傳輸。如FTP服務的21端口,HTTP服務的80端口等等。UDP類型端口:即用戶數據報協議端口,無需在客戶端和服務器之間建立連接,可靠性得不到保障。常見的有DNS服務的53端口,QQ使用的8000和4000端口等等。每個服務都占用一個端口,默認時每個服務有自己特定的端口號,除非特意改變它們常用網絡服務及對應的端口號表14-1常用網絡服務及端口號網絡服務對應端口號http,超文本傳輸服務80ftp,文件傳輸服務21telnet,登錄遠程服務器23smtp,簡單郵件傳輸服務25pop,將郵件存儲在遠程郵件服務器上109常用網絡服務及對應的端口號另外,一些安裝到系統平臺的Web服務器軟件和數據庫管理系統軟件在啟動時也會占用一些固定端口,如MSSQLServer默認占用1433端口,ApacheTomcat默認占用8080端口,BEAWeblogic默認占用7001端口等。ApacheTomcat和BEAWeblogic都是現今比較流行的JSP引擎,主要用于基于JSP技術開發的站點,JSP(JavaServerPages)應是讀者在后繼的學習中要接觸到的知識。SQLServer是微軟公司開發的操作簡便但功能強大的數據庫管理系統,在本書的最后一章中我們會學習到關于它基本的訪問和使用網絡通信-內容目錄網絡基本概念URL使用Socket類和ServerSocket類編寫通信程序DatagramSocket類和DatagramPacket類URL類
URL(UniformResourceLocator)是統一資源定位器的簡稱,它可以用來標識網絡資源的地址。URL的組成:
一個URL包括兩個部分:協議名和資源名,中間用冒號隔開,例如:協議名:資源名其中協議名由前面14.2.1節的網絡服務名指定。資源名即資源的完整地址,包括主機名、端口號、目錄或文件名等內容。下面是幾個URL地址示例:
/tom/index.html#chapter1:21/pic
Java中的URL類包中的URL類實現了Java對URL的應用,它的常用構造方法如下:1.URL(Stringspec);根據字符串表示形式創建URL對象。例如:URLcsdn_url=newURL(“:21/pic”);2.URL(Stringprotocol,Stringhost,intport,Stringfile);根據指定的協議、主機名、端口號和文件名創建URL對象。例如:URLcsdn_url=newURL(“ftp”,“”,21,“pic”);
Java中的URL類3.URL(URLcontext,Stringspec);通過在指定的上下文中對給定的字符串進行解析創建URL對象。例如:URLcsdn_url=newURL(“:21/pic”); URLindex_url=newURL(csdn_url,“index.html”);注意:構造URL對象時,如果指定了錯誤的協議,會拋出MalformedURLException異常。
URL類常用方法URL類的方法說明int
getDefaultPort()獲得與此URL關聯協議的默認端口號StringgetFile()獲得此URL的文件名StringgetHost()獲得此URL的主機名StringgetPath()獲得此URL的路徑部分int
getPort()獲得此URL的端口號StringgetProtocol()獲得此URL的協議名稱表14-2URL類常用方法例14-1:獲取URL類屬性信息import.*;publicclassGetURLInfo{publicstaticvoidmain(String[]args)throwsMalformedURLException{ URLurl=newURL("/"); URLpageUrl=newURL(url,"download/index.jsp"); System.out.println("協議關聯端口:"+pageUrl.getDefaultPort()); System.out.println("站點文件名:"+pageUrl.getFile()); System.out.println("站點主機:"+pageUrl.getHost()); System.out.println("使用協議:"+pageUrl.getProtocol());}}14.2.3使用InetAddress類獲取主機地址網絡上的主機地址有兩種表示形式:域名方式:IP地址方式:34使用包中的InetAddress類,可以獲取這兩種地址。
1.獲取Internet上主機地址使用InetAddress類的getByNames(Strings)靜態方法可以根據域名字符串獲得InetAddress對象,該對象包含有該參數的“域名形式”和“IP地址形式”的值對。例如可以輸入域名“”得到值對“/32”。另外,InetAddress類還有兩個方法用以從InetAddress對象的值對中獲取“域名形式”或“IP地址形式”。publicStringgetHostName();獲取InetAddress對象的域名形式publicStringgetHostAddress();獲取InetAddress對象的IP地址形式2.獲取本地機地址:使用InetAddress類的getLocalHost()靜態方法可以獲得本地機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){ }}}網絡通信-內容目錄網絡基本概念URL使用Socket類和ServerSocket類編寫通信程序DatagramSocket類和DatagramPacket類Java的網絡API類庫是典型的基于TCP/IP通訊的網絡類庫,程序之間依靠Socket進行通訊。我們可以把Socket看成是在兩個程序進行通訊連接中的一個端點(比如電源的一個插座),一個程序先將一段信息寫入Socket中,然后該Socket將這段信息發送給另外一個Socket,使這段信息能傳送到那個程序中。“套接字”(Socket)也是一種軟件形式的抽象,用于表達兩臺機器間一個連接的“終端”。針對一個特定的連接,每臺機器上都有一個“套接字”,可以想象它們之間有一條虛擬的“線纜”。線纜的每一端都插入一個“套接字”或稱“插座”里。當兩臺機器都建立了Socket,并連接完畢就可以通信了。什么是socket?兩個基于數據流的套接字類從套接字得到的結果是一個InputStream以及OutputStream(若使用恰當的轉換器,則分別是Reader和Writer),以便將連接作為一個IO流對象對待。有兩個基于數據流的套接字類:ServerSocket,服務器用它“偵聽”進入的連接;Socket,客戶用它初始一次連接。運行過程
注意:“ServerSocket”這個命名有不恰當的地方,因為它的作用不是真的成為一個Socket,而是在其它Socket同它連接的時候產生一個Socket對象。所以,程序的運行過程應該是這樣的:1)創建服務器端ServerSocket對象和客戶端Socket對象,建立連接;2)建立信息,以流的形式連接到Socket;3)讀寫操作;4)關閉Socket。創建ScoketSocket類的常用構造方法如下:Socket(InetAddressaddress,intport);創建一個流套接字并將其連接到指定IP地址的指定端口號。ServerSocket類的常用構造方法如下:ServerSocket(intport);創建綁定到特定端口的服務器套接字。例如:創建客戶端的Socket對象,并設定端口號為2000,格式為:SocketclientSocket=newSocket("",2000);創建服務器端的ServerSocket對象,格式為:ServerSocketserverSocket=newServerSocket(2000);14.3.3創建輸入/輸出流
ServerSocket類與Socket類都提供了getInputStream()和getOutputStream()方法來得到對應的輸入/輸出流,這兩個方法分別返回InputStream和OutputStream類的對象。為了提高輸入/輸出效率,可以再套接過濾流,如DataInputStream和DataOutputStream類用于處理數字,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(“聊天客戶端已經啟動...”);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”時,程序退出。【運行步驟】運行結果網絡通信-內容目錄網絡基本概念URL使用Socket類和ServerSocket類編寫通信程序DatagramSocket類和DatagramPacket類14.4創建、接收與發送數據報需要從多個路徑收集多種數據,且對可靠性要求并不嚴格,這時就可以考慮使用基于UDP協議的通信方式。另外,UDP也可以實現組播方式通信。包提供了DatagramSocket類和DatagramPacket類用來支持數據報通信,其中DatagramPacket類用于建立數據報包,DatagramSocket類用于在程序之間建立數據報的通信連接。在數據報通信時,客戶端與服務器端都要先建立DatagramSocket對象以進行連接,然后就可以接收或發送數據報包。DatagramSocket類常用構造方法DatagramSocket類常用構造方法:DatagramSocket(intport)
創建數據報套接字并將其綁定到本地主機上的指定端口。DatagramSocket(intport,InetAddressladdr)
創建數據報套接字,將其綁定到指定的本地地址。DatagramPacket類常用構造方法DatagramPacket類常用構造方法:(其中buf數組用以存放數據報數據)DatagramPacket(byte[]buf,intlength)
構造DatagramPacket,用來接收長度為length的數據包。DatagramPacket(byte[]buf,intoffset,intlength)構造DatagramPacket,用來接收長度為length的包,并指定緩沖區偏移量DatagramPacket(byte[]buf,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 醫院黨支部黨建工作總結模版
- 初中數學家長會發言稿模版
- 2025年儲能電池熱管理技術在船舶動力系統中的應用研究報告
- 醫療行業員工培訓數字化轉型的挑戰與機遇
- 2025年快時尚品牌市場拓展與品牌國際化戰略規劃報告
- 人工智能產業園項目財務分析與資金預算
- 2025年線上法律咨詢服務平臺行業發展趨勢預測報告
- 后期管護責任協議書
- 合伙建設樓房協議書
- 嘉興生態補償協議書
- 2025屆浙江省稽陽聯誼學校高三下學期4月二模政治試題 含解析
- MOOC 創業管理-江蘇大學 中國大學慕課答案
- (高級)政工師理論考試題庫及答案(含各題型)
- 個人車位租賃合同電子版
- 《湖心亭看雪》選擇題解析(內容理解)
- 外墻真石漆施工質量通病與預防措施
- 中央空調應急管理制度匯編
- 國外高速公路管理模式及發展趨勢
- 深圳工改工最新政策研究
- 煤礦自動化(培訓)
- 肖申克的救贖 英語三分鐘演講-文檔資料
評論
0/150
提交評論