版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、Java編程精要編程精要 Socket網絡編程網絡編程福建 廈門2014年6月本章學習內容n網絡基礎nURLnJava網絡流技術nSocket通信技術計算機網絡基礎知識n什么是計算機網絡把分布在不同的地理區(qū)域的計算機與專門的外部設備用通信線路互聯(lián)成一個規(guī)模大,功能強的網絡系統(tǒng),從而使眾多的計算機可以方便地互相傳遞信息,共享硬件、軟件、數(shù)據信息等資源n計算機網絡的主要功能使用遠程資源共享信息、程序和數(shù)據分布處理網絡通信協(xié)議/接口n網絡通信協(xié)議計算機網絡中實現(xiàn)通信必須有一些約定即通信協(xié)議,對速率、傳輸代碼、代碼結構、傳輸控制步驟、出錯控制等制定標準。 n網絡通信結構為了使兩個結點之間能進行對話,必
2、須在它們之間建立通信工具(即接口),使彼此之間 能進行信息交換。n接口包括兩部分:硬件裝置:實現(xiàn)結點之間的信息傳送 軟件裝置:規(guī)定雙方進行通信的約定協(xié)議分層思想n為什么要分層由于節(jié)點之間聯(lián)系很復雜,在制定協(xié)議時,把復雜成分分解成一些簡單的成分,再將它們復合起來。最常用的復合方式是層次方式,即同層間可以通信、上一層可以調用下一層,而與下一層不發(fā)生關系n通信協(xié)議的分層規(guī)定把用戶應用程序作為最高層,把物理通信作為最低層,將其間的協(xié)議處理分為若干層,規(guī)定每層的處理任務,也規(guī)定每層的接口標準OSI的七層模型數(shù)據的封裝與拆封n封裝:發(fā)送方數(shù)據在網絡模型的各層傳送過程中加入頭尾的過程。信封:郵編地址等n拆封
3、:接受方收到數(shù)據后去除相應的頭尾過程物理介質物理介質第第7層層第第6層層第第5層層第第4層層第第3層層第第2層層第第1層層第第7層層第第6層層第第5層層第第4層層第第3層層第第2層層第第1層層應用層應用層表示層表示層會話層會話層傳輸層傳輸層網絡層網絡層數(shù)據鏈路層數(shù)據鏈路層物理層物理層TCP/IP協(xié)議nTCP協(xié)議:為一種可靠的端對端協(xié)議:重發(fā)一切沒有收到的數(shù)據,進行數(shù)據內容準確性檢查并保證分組的正確順序。TCP協(xié)議位于OSI參考模型的傳輸層nIP協(xié)議:是網絡上的計算機進行連接的基礎,是不可靠的,無論傳送正確與否都不進行檢驗、不回送確認、不保證分組的正確順序。IP協(xié)議位于OSI參考模型的網絡層TC
4、P/IP協(xié)議nTCP/IP協(xié)議是Internet上不同系統(tǒng)之間互聯(lián)的一組協(xié)議。它為分散和不同類型的硬件提供了一個通用的編程接口。TCP/IP 協(xié)議使Internet盡可能成為一個分散、無序的網絡。TCP/IP通常被看成一個4層模型:應用層、傳輸層、網絡層以及數(shù)據鏈路層+物理層。nhttp協(xié)議nftp協(xié)議IP地址/域名/端口nIP地址TCP/IP使用IP地址來標識源地址和目的地址IP地址格式:55目前版本是第四版(Version4)n域名(Domain Address)便于記憶的字符串形式:與IP地址間存在映射關系。域名服務器將負責解析IP地址/域名/端口n端口(Por
5、t)邏輯意義上的數(shù)據傳輸通道、或者說模擬通道。tcp/IP協(xié)議規(guī)定,每臺計算機擁有65536個這種邏輯通信端口端口號:用于標識這些端口的整數(shù)編號,065536端口n端口是一種抽象的軟件結構(包括一些數(shù)據結構和I/O緩沖區(qū))。應用程序通過系統(tǒng)調用與某端口建立連接(binding)后,傳輸層傳給該端口的數(shù)據都被相應的進程所接收,相應進程發(fā)給傳輸層的數(shù)據都通過該端口輸出n端口用一個整數(shù)型標識符來表示,即端口號。端口號跟協(xié)議相關,TCP/IP傳輸層的兩個協(xié)議TCP和UDP是完全獨立的兩個軟件模塊,因此各自的端口號也相互獨立,端口通常稱為協(xié)議端口(protocol port) ,簡稱端口n端口使用一個1
6、6位的數(shù)字來表示,它的范圍是 0-65535,1024以下的端口號保留給預定義的服務。例如:http使用80端口,ftp使用21IP地址/域名有關的類nJ包中定義了相關的類nJ.InetAddressnJ.Inet4AddressnJ.Inet6AddressJava網絡編程概述nJava語言最初開發(fā)的目的是為了控制家電設備網絡nJava語言的設計主旨之一就是連接機器,因此其對網絡通信具有很強的支持能力nJ包能夠讓Java程序通過網絡進行通信;結合IO流,通過網絡讀寫文件幾乎與讀寫本地磁盤一樣容易Java網絡流技術n在Java技術中,萬維網上的文本文檔被視為可訪問的資源,包括HTML文件、XM
7、L文件以及其它類型的純文本文檔nJava網絡程序經常會與Web文檔進行大量交互n加載網絡文檔并讀取內容的方法大體可描述為:通過URL建立連接,然后由該連接建立輸入流閱讀器,最后使用輸入流閱讀器建立緩沖輸入流閱讀器Java網絡流技術n加載網絡文檔并讀取內容的步驟如下:1.創(chuàng)建一個網絡地址URL的對象,它指向網絡資源2.創(chuàng)建一個HttpURLConnection對象,它能夠加載URL并連接到相應站點3.使用HttpURLConnection對象的getConten()方法來創(chuàng)建一個InputStreamReader對象,用于讀取來自URL的數(shù)據流4.使用InputStreamReader對象的ge
8、tConten()方法創(chuàng)建一個BufferedReader對象,該對象能夠高效地從輸入流中讀取數(shù)據Java網絡流技術nURL類共有4個構造方法,常用的有以下2個:URL(String addr):使用完整的網絡地址(如:http:/)來創(chuàng)建一個URL對象URL(URL url, String path):將URL作為基本地址,將path作為相對路徑來創(chuàng)建一個URL對象Java網絡流技術n使用網絡流技術讀取http:/(或任何其它網站)地址的數(shù)據,并寫入磁盤文件中n以下進行技術動作分解技術動作分解-1n創(chuàng)建URL對象,并通過其對網絡資源進行連接,addr為完整的網絡地址/用地址用地址addr創(chuàng)建
9、創(chuàng)建URL對象對象URL page = new URL(addr); /創(chuàng)建創(chuàng)建HTTP URL連接連接HttpURLConnection conn = (HttpURLConnection)page.openConnection(); conn.connect(); /進行連接進行連接技術動作分解-2n使用getContent()方法建立輸入流(InputStreamReader),并將該輸入流包裝為緩沖流(BufferedReader)/建立輸入流建立輸入流InputStreamReader dataIn = new InputStreamReader(InputStream)conn.g
10、etContent();/建立緩沖流建立緩沖流BufferedReader bfrWeb = new BufferedReader(dataIn); 技術動作分解-3n建立文件輸出流(FileWriter)以及輸出緩沖流(BufferedWriter),path為文件路徑FileWriter fw = new FileWriter(path);BufferedWriter bwFile = new BufferedWriter(fw);技術動作分解-4n逐行讀取數(shù)據,并寫入磁盤文件String data;data = bfrWeb.readLine();while(data != null)
11、bwFile.write(data); bwFile.newLine(); data = bfrWeb.readLine();技術動作分解-5n將IO流逐個關閉,注意順序:后打開的先關閉bwFile.close();fw.close();bfrWeb.close();dataIn.close();編程練習n編寫程序,實現(xiàn)對網絡文檔的讀取,并存入磁盤文件n在完成上一個要求的基礎上,將其實現(xiàn)為圖形用戶界面Socket通信技術n兩個進程間可以通過一個雙向的網絡通信連接實現(xiàn)數(shù)據交換,這種通信鏈路的端點被稱為“套接字”(Socket)nSocket通信技術,可以方便地建立可靠的、雙向的、持續(xù)的、點對點通
12、信連接nSocket通常用來實現(xiàn)Client-Server連接n建立連接時所需的尋址信息包括:遠程計算機的機器名或IP地址試圖連接的端口號(Port number)nJ包中定義的兩個類Socket和ServletSocket,分別用來實現(xiàn)雙向鏈接的client和servler端Socket通信技術n在Socket通信模型中,服務器端使用ServerSocket等待客戶端的連接n每一個客戶端使用一個Socket類對象表示Socket通信技術nServerSocket類主要用在服務器端程序,用于接受客戶端的連接請求,其常用方法如下:方法原型方法原型說明說明public ServerSocket(i
13、nt port) throws IOException構造方法,創(chuàng)建構造方法,創(chuàng)建ServerSocket實實例,并指定監(jiān)聽端口例,并指定監(jiān)聽端口(port)public Socket accept() throws IOException等待客戶端連接,此方法連接之等待客戶端連接,此方法連接之前一直阻塞前一直阻塞public InetAddress getInetAddress()返回服務器的返回服務器的IP地址地址public boolean isClosed()判斷判斷ServerSocket是都關閉是都關閉public void close() throws IOException關閉
14、關閉ServerSocketSocket通信技術n每一個Socket類對象表示一個客戶端,其常用的方法如下:方法原型方法原型說明說明public Socket(String host, int port) throws UnknownHostException, IOException構造方法,指定要連接服務構造方法,指定要連接服務器的主機名稱及連接端口器的主機名稱及連接端口public InputStream getInputStream() throws IOException返回此返回此Socket的輸入流的輸入流public OutputStream getOutputStream()
15、 throws IOException返回此返回此Socket的輸出流的輸出流public boolean isClosed()判斷此判斷此Socket是都關閉是都關閉public void close() throws IOException關閉此關閉此SocketSocket編程基本步驟n1.建立網絡連接n2.創(chuàng)建Socketn3.打開連接到Socket的輸入/輸出流n4.通過已打開的I/O流進行數(shù)據的讀寫操作n5.關閉已打開的I/O流n6.關閉Socket服務器端程序n調用ServerSocket(int port)創(chuàng)建一個服務器端套接字,并綁定到指定端口上n調用accept(),監(jiān)聽連
16、接請求,如果客戶端請求連接,則接受連接,返回通信套接字n調用Socket類的getOutputStream()和getInputStream獲取輸出流和輸入流,開始網絡數(shù)據的發(fā)送和接收n最后關閉通信套接字客戶端程序n調用Socket()創(chuàng)建一個流套接字,并連接到服務器端n調用Socket類的getOutputStream()和getInputStream獲取輸出流和輸入流,開始網絡數(shù)據的發(fā)送和接收n最后關閉通信套接字Socket通信模型ServerServerSocket s (port #)s.accept()等待連接等待連接SocketOutputStreamInputStreamSock
17、et.close()ClientSocket(InetAddress,port#)主動發(fā)起連接主動發(fā)起連接OutputStreamInputStreamSocket.close()Socke通信技術n服務器端示例:public void listen() throws IOException ServerSocket serv = new ServerSocket(8888); Socket c = serv.accept(); OutputStream os = c.getOutputStream(); DataOutputStream dos = new DataOutputStream(
18、os); dos.writeUTF(Hi, I get you information.); dos.writeUTF(Your IP: +c.getInetAddress(); dos.writeUTF(Your port: +c.getPort(); dos.writeUTF(Over); dos.close(); os.close(); c.close(); serv.close();Socke通信技術n客戶端示例:public void sendInfo() throws UnknownHostException, IOException Socket c = new Socket(1
19、, 8888); InputStream is = c.getInputStream(); DataInputStream dis = new DataInputStream(is); String content = dis.readUTF(); while(content.equals(Over) = false) System.out.println(content); content = dis.readUTF(); dis.close(); is.close(); c.close();數(shù)據操作流nDataInputStream與DataOutpuStream稱為數(shù)據操
20、作流,能夠將InputStream與OutputStream包裝為平臺無關的IO流,從是實現(xiàn)對基本數(shù)據類型進行讀寫nreadUTF()與wirteUTF()方法是采用UTF-8編碼對數(shù)據進行讀寫的方法nUTF-8編碼是針對Unicode編碼設計的可變長度編碼,在網絡流中使用這種格式的編碼能夠取得較高的效率與穩(wěn)定性,并兼容中文漢字DataInputStreamDataInputStream類類DataInputStream類可以輸入任何類型的數(shù)據,但它不可以單獨使用,需要要配合其它字節(jié)輸入流一起使用DataInputStream類的構造方法只有一種方式:如:InputStream is = c.
21、getInputStream();DataInputStream dis = new DataInputStream(is);構構 造造 方方 法法說說 明明DataInputStream(InputStream in)利用其它的字節(jié)輸入流創(chuàng)建數(shù)利用其它的字節(jié)輸入流創(chuàng)建數(shù)據輸入流對象據輸入流對象DataInputStreamDataInputStream類的常用方法類的常用方法方方 法法 原原 型型說說 明明final boolean readBoolean() throws IOException從數(shù)據輸入流中讀取一個從數(shù)據輸入流中讀取一個boolean型數(shù)據型數(shù)據final char re
22、adChar() throws IOException從數(shù)據輸入流中讀取一個從數(shù)據輸入流中讀取一個char型數(shù)據型數(shù)據final int readInt() throws IOException從數(shù)據輸入流中讀取一個從數(shù)據輸入流中讀取一個int型數(shù)據型數(shù)據final long readLong() throws IOException從數(shù)據輸入流中讀取一個從數(shù)據輸入流中讀取一個long型數(shù)據型數(shù)據final float readFloat() throws IOException從數(shù)據輸入流中讀取一個從數(shù)據輸入流中讀取一個float型數(shù)據型數(shù)據final double readDouble()
23、 throws IOException從數(shù)據輸入流中讀取一個從數(shù)據輸入流中讀取一個double型數(shù)據型數(shù)據DataOutputStreamDataOutputStream類類DataOutputStream類可以輸出任何類型的數(shù)據,同樣也需要配合其他字節(jié)輸出流一起使用;DataOutputStream類的構造方法如下:如:OutputStream os = c.getOutputStream();DataOutputStream dos = new DataOutputStream(os);構構 造造 方方 法法說說 明明DataOutputStream(OutputStream out)利用
24、其它的字節(jié)輸出流創(chuàng)利用其它的字節(jié)輸出流創(chuàng)建數(shù)據輸出流對象建數(shù)據輸出流對象DataOutputStreamDataOutputStream類的常用方法類的常用方法方方 法法 原原 型型說說 明明final void writeBoolean(boolean v) throws IOException往數(shù)據輸出流中寫入一個往數(shù)據輸出流中寫入一個boolean型數(shù)據型數(shù)據final void writeChar(char v) throws IOException往數(shù)據輸出流中寫入一個往數(shù)據輸出流中寫入一個char型數(shù)據型數(shù)據final void writeInt(int v) throws IOException往數(shù)據輸出流中寫
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 專屬藥物開發(fā):2024年度定制化服務協(xié)議版B版
- 二零二五年度餐飲企業(yè)食品安全教育與培訓合同6篇
- 2024私人租賃汽車租賃合同范本(含跨境服務)3篇
- 2025年拆除工程勞務服務合同范本(含工期保障)4篇
- 2025年度高端醫(yī)療器械銷售代理協(xié)議4篇
- 2024年03月浙江中國郵政儲蓄銀行浙江省分行校園招考筆試歷年參考題庫附帶答案詳解
- 上海二手房標準買賣合同范本2024一
- 2025年高檔紅茶購銷合作協(xié)議茶葉茶葉定購合同4篇
- 安全基本知識培訓
- 2025年度二手柴油發(fā)電機交易及翻新服務合同4篇
- 英語名著閱讀老人與海教學課件(the-old-man-and-the-sea-)
- 學校食品安全知識培訓課件
- 全國醫(yī)學博士英語統(tǒng)一考試詞匯表(10000詞全) - 打印版
- 最新《會計職業(yè)道德》課件
- DB64∕T 1776-2021 水土保持生態(tài)監(jiān)測站點建設與監(jiān)測技術規(guī)范
- ?中醫(yī)院醫(yī)院等級復評實施方案
- 數(shù)學-九宮數(shù)獨100題(附答案)
- 理正深基坑之鋼板樁受力計算
- 學校年級組管理經驗
- 10KV高壓環(huán)網柜(交接)試驗
- 未來水電工程建設抽水蓄能電站BIM項目解決方案
評論
0/150
提交評論