![第5章網絡編程_第1頁](http://file4.renrendoc.com/view/e5fbe554a98bce31d857e65b346fd752/e5fbe554a98bce31d857e65b346fd7521.gif)
![第5章網絡編程_第2頁](http://file4.renrendoc.com/view/e5fbe554a98bce31d857e65b346fd752/e5fbe554a98bce31d857e65b346fd7522.gif)
![第5章網絡編程_第3頁](http://file4.renrendoc.com/view/e5fbe554a98bce31d857e65b346fd752/e5fbe554a98bce31d857e65b346fd7523.gif)
![第5章網絡編程_第4頁](http://file4.renrendoc.com/view/e5fbe554a98bce31d857e65b346fd752/e5fbe554a98bce31d857e65b346fd7524.gif)
![第5章網絡編程_第5頁](http://file4.renrendoc.com/view/e5fbe554a98bce31d857e65b346fd752/e5fbe554a98bce31d857e65b346fd7525.gif)
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
網絡編程JavaEE開發(fā)工程師Java高級編程
網絡概念及通信協(xié)議分層思想TCP/IP協(xié)議Java對網絡編程的支持TCP、UDP通信協(xié)議的Java實現Contents目錄網絡編程基本概念TCP/IP(TransmissionControlProtocol傳輸控制協(xié)議/InternetProtocol網間協(xié)議)是Internet的主要協(xié)議,定義了計算機和外設進行通信所使用的規(guī)則。TCP/IP網絡參考模型包括五個層次:應用層、傳輸層、網絡層、鏈路層、物理層。
應用層表示層會話層傳輸層網絡層數據鏈路層物理層在TCP/IP網絡中,不同的機器之間進行通信時,數據的傳輸是由傳輸層控制的,這包括數據要發(fā)往的目標機器及應用程序、數據的質量控制等。TCP/IP網絡中最常用的傳輸協(xié)議就是TCP(TransportControlProtocol)和UDP(UserDatagramProtocol)。網絡編程基本概念一臺機器通常只通過一條鏈路連接到網絡上,即它只有一個IP地址,但一臺機器中往往有很多應用程序需要進行網絡通信,如何區(qū)分呢?端口號是一個標記機器的邏輯通信信道的正整數,端口號不是物理實體。IP地址和端口號組成了所謂的Socket,Socket是網絡上運行的程序之間雙向通信鏈路的最后終結點,它是TCP和UDP的基礎。網絡編程基本概念網絡服務httpftp其他服務23telnet端口2180客戶程序SocketIP,port網絡編程基本構圖
端口號是用一個16位的整數來表達的,其范圍為0~65535,其中0~1023為系統(tǒng)所保留,專門給那些通用的服務(well-knownservices)如http服務的端口號為80,telnet服務的端口號為21,ftp服務的端口為23,…因此,當我們編寫通信程序時,應選擇一個大于1023的數作為端口號,以免發(fā)生沖突。什么是端口號1.傳輸控制協(xié)議(TCP)是在端點與端點之間建立持續(xù)的連接而進行通信。2.建立連接后,發(fā)送端將發(fā)送的數據印記了序列號和錯誤檢測代碼,并以字節(jié)流的方式發(fā)送出去;接收端則對數據進行錯誤檢查并按序列順序將數據整理好,數據在需要時可以重新發(fā)送,因此整個字節(jié)流到達接收端時完好無缺。這與兩個人打電話的情形是相似的。3.TCP協(xié)議具有可靠性和有序性,并且以字節(jié)流的方式發(fā)送數據,它通常被稱為流通信協(xié)議。TCP簡介TCP/IP協(xié)議
使用Thread子類創(chuàng)建線程的優(yōu)點是:我們可以在子類中增加新的成員變量,使線程具有某種屬性,也可以在子類中新增加方法,使線程具有某種功能。但是,Java不支持多繼承,Thread類的子類不能再擴展其他的類。使用Runable接口與TCP協(xié)議不同,用戶數據報協(xié)議(UDP)則是一種無連接的傳輸協(xié)議首先需要將要傳輸的數據定義成數據報(Datagram),在數據報中指明數據所要達到的端點(Socket,主機地址和端口號),然后再將數據報發(fā)送出去。特點:
這種傳輸方式是無序的,也不能確保絕對的安全可靠,但它很簡單也具有比較高的效率,這與通過郵局發(fā)送郵件的情形非常相似。UDP與TCP的不同TCP協(xié)議和UDP協(xié)議各有各的用處。當對所傳輸的數據具有時序性和可靠性等要求時,應使用TCP協(xié)議;當傳輸的數據比較簡單、對時序等無要求時,UDP協(xié)議能發(fā)揮更好的作用,如ping、發(fā)送時間數據等。TCP與UDP對比UDPTCP/IP傳輸效率不需建立連接,直接傳受傳輸前需要建立連接傳輸大小最大64KB無限制可靠性不可靠的協(xié)議可靠的Java提供的網絡功能類InetAddress面向的是網絡層(IP層),用于標識網絡上的硬件資源URL面向的應用層,通過URL,Java程序可以直接送出或讀入網絡上的數據Sockets和Datagram面向的則是傳輸層。針對網絡通信的不同層次,Java提供的網絡功能有四大類:Java對網絡編程的支持
InetAddresspublicstaticInetAddressgetByName(String
host):host可以是一個機器名,也可以是一個形如“%d.%d.%d.%d”的IP地址或一個DSN域publicstaticInetAddressgetLocalHost():返回本地主機publicstaticInetAddress[]getAllByName(String
host):根據系統(tǒng)上配置的名稱服務返回其IP地址所組成的數組publicstaticInetAddressgetByAddress(String
host,Byte[]
addr):根據提供的主機名和IP地址創(chuàng)建InetAddressInetAddress:用于標識網絡上的硬件資源,它提供了一系列方法以描述、獲取及使用網絡資源。
InetAddressimport.*;…try{
InetAddressaddress=InetAddress.getLocalHost(); //將此IP地址轉換為String System.out.println(address.toString()); //獲取此IP地址的主機名
System.out.println(address.getHostName()); //獲取IP System.out.println(address.getHostAddress());}catch(UnknownHostExceptione){ e.printStackTrace();}URL介紹URL是統(tǒng)一資源定位符(UniformResourceLocator)的簡稱,它表示Internet上某一資源的地址。Internet上的資源包括HTML文件、圖象文件、聲音文件、動畫文件以及其他任何內容(并不完全是文件,也可以是一個對數據庫的查詢等)。通過URL,就可以訪問Internet。瀏覽器或其他程序通過解析給定的URL就可以在網絡上查找相應的文件或其他資源。一個URL包括兩部分內容:協(xié)議名稱和資源名稱,中間用冒號隔開:Protocol:resourceName
如:獲取URL的方法publicStringgetProtocol():獲取該URL的協(xié)議名publicStringgetHost():獲取該URL的主機名publicStringgetPort():獲取該URL的端口號publicStringgetPath():獲取該URL的文件路徑publicStringgetFile():獲取該URL的文件名publicStringgetRef():獲取該URL在文件中的相對位置publicStringgetQuery():獲取該URL的查詢名使用URL獲取網站信息URLgis=newURL("");System.out.println("Protocol:"+gis.getProtocol());System.out.println("hostname:"+gis.getHost());System.out.println("port:"+gis.getPort());System.out.println("file:"+gis.getFile());
BufferedReaderin=newBufferedReader(new InputStreamReader(gis.openStream(),"utf-8"));//讀取網站信息Stringline; while((line=in.readLine())!=null){ System.out.println(line);}in.close();方法openStream()與指定的URL建立連接并返回一個InputStream對象,將URL位置的資源轉成一個輸入數據流。通過這個InputStream對象,就可以讀取資源中的數據URLJava程序InputStreamHTTPURLConnection用HTTPURLConnection類提交請求到百度搜索并獲取搜索后的結果。請求搜索內容:java<!DOCTYPEhtml><!--STATUSOK--><html><head><metahttp-equiv="X-UA-Compatible"content="IE=7"><metahttp-equiv="content-type"content="text/html;charset=gb2312"><title>百度搜索_java</title>….
搜索結果:(代碼是搜索后返回的html源碼,圖片為瀏覽器顯示效果)publicclassTestParamURL{publicstaticvoidmain(String[]args){StringstrUrl="/s";Stringparam="wd=java";System.out.println(sendGet(strUrl,param));}//以GET方式提交HTTP請求到服務器,并返回結果publicstaticStringsendGet(Stringurl,Stringparam){Stringresult="";try{StringurlName=url+"?"+param;URLu=newURL(urlName);URLConnectionconnection=u.openConnection();}catch(){......}}}代碼展示connection.connect();BufferedReaderin=newBufferedReader(newInputStreamReader( connection.getInputStream()));Stringline;while((line=in.readLine())!=null){ result+="\n"+line;}in.close();}catch(Exceptione){System.out.println("沒有結果!"+e);}returnresult;}銜接上一頁/***以POST方式提交HTTP請求到服務器,并返回結果*參數形式為"參數名=值&參數名=值"*/publicstaticStringsendPost(Stringurl,Stringparam){Stringresult="";try{URLhttpurl=newURL(url);HttpURLConnectionhttpConn=(HttpURLConnection)httpurl .openConnection();//設置是否向httpUrlConnection輸出,因為這個是post請求,參數要放在http正文內,因此需要設為true,默認情況下是false;httpConn.setDoOutput(true);//設置是否從httpUrlConnection讀入,默認情況下是true;銜接上一頁httpConn.setDoInput(true);//Post請求不能使用緩存httpConn.setUseCaches(false);//設定傳送的內容類型是可序列化的java對象//(如果不設此項,在傳送序列化對象時,當WEB服務默認的不是這種類型時可能//拋java.io.EOFException)httpConn.setRequestProperty("Content-type", "application/x-java-serialized-object");//設定請求的方法為"POST",默認是GEThttpConn.setRequestMethod("POST");銜接上一頁//利用輸出流向服務器傳送參數,參數形式為"參數名=值&參數名=值"PrintWriterout=newPrintWriter(httpConn.getOutputStream());out.print(param);out.flush();out.close();BufferedReaderin=newBufferedReader(newInputStreamReader( httpConn.getInputStream()));Stringline;while((line=in.readLine())!=null){ result+="\n"+line;}in.close();}catch(Exceptione){ System.out.println("沒有結果!"+e);}returnresult;}}銜接上一頁TCP與UDP通信協(xié)議的Java實現
Socket套接字Socket套接字:把網絡連接當成一個流,可以通過流的方式實現數據的交換。服務器套接字(ServerSocket)客戶端套接字客戶端套接字Socket(String
host,intport)Socket(InetAddressaddress,intport)publicInetAddressgetInetAddress()publicintgetPort()publicintgetLocalPort()publicInetAddressgetLocalAddress()publicInputStreamgetInputStream()throwsIOExceptionpublicOutputStreamgetOutputStream()throwsIOExceptionpublicvoidclose()throwsIOException服務器端套接字ServerSocket()ServerSocket(intport)ServerSocket(intport,intbacklog)ServerSocket(intport,intbacklog,InetAddressbindAddr)服務器端套接字:每個服務器端套接字運行在服務器上特定的端口,監(jiān)聽這個端口的TCP連接。Socketaccept():監(jiān)聽并接受到此套接字的連接voidclose():關閉此套接字SocketTCP通信基本步驟第1步:在客戶端和服務器端創(chuàng)建Socket/ServerSocket實例第2步:打開連接到Socket的輸入/輸出流第3步:利用輸入/輸出流,按照一定的協(xié)議對Socket進行讀/寫操作第4步:關閉輸入/輸出流和Socket創(chuàng)建服務器(端口號)定義數據成員服務器等待網絡連接建立socket流讀客戶端信息向用戶發(fā)出一個字符串創(chuàng)建Socket實例定義數據成員建立socket流讀socket流(接收并顯示)發(fā)送用戶名給服務器關閉流waitingforuser34343434提示用戶登錄成功讀socket流關閉流服務器端客戶端Socket通信示例try{ServerSockets=newServerSocket(3434);//1、建立Socketwhile(true){Sockets1=s.accept();//2、在客戶端和服務器端同時打開輸入/輸出流//BufferedWriterbw=newBufferedWriter(//newOutputStreamWriter(s1.getOutputStream()));//bw.write("你好,"+s1.getInetAddress()+":"+s1.getPort());//bw.close();//服務器端讀信息BufferedReaderbr=newBufferedReader(newInputStreamReader(s1.getInputStream())); Stringstr=br.readLine();System.out.println("客戶端說:"+str);s1.close();}}catch
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年模塊組合集成電源合作協(xié)議書
- 部編道德與法治八年級下冊教學工作計劃
- 2025年胺類合作協(xié)議書
- 2025年工業(yè)爐窯的新型燃燒裝置合作協(xié)議書
- 小學英語外研版(三起點)六年級上Module1課本+翻譯+練習
- 2025年個人房屋質押借款合同模板(三篇)
- 2025年個體銷售員勞動合同范文(2篇)
- 2025年產品代理銷售合同參考樣本(三篇)
- 2025年中學食堂合伙經營協(xié)議(三篇)
- 2025年個人旅游協(xié)議范文(2篇)
- 《處理人際關系》課件
- TSGD7002-2023-壓力管道元件型式試驗規(guī)則
- 2022版義務教育英語課程標準整體解讀課件
- 2024年實驗小學大隊委競選筆試試題題庫
- GB/T 44412-2024船舶與海上技術液化天然氣燃料船舶加注規(guī)范
- 小學三年級數學上冊口算題卡(加換算)
- 機械制造HSE協(xié)議書
- 2024-2030年中國靜脈血栓栓塞癥(VTE)防治行業(yè)市場全景監(jiān)測及投資策略研究報告
- 中國化工生產企業(yè)碳核算指南
- 2023-2024學年上學期八年級語文期末綜合復習-現代文閱讀題(遼寧地區(qū)適用)(含解析)
- 鋼結構工程施工(杜紹堂 第五版) 課件全套 單元1-3 緒論、材料與連接- 鋼結構施工安全
評論
0/150
提交評論