




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、第八課Socket編程,2007 iSoftStone Holdings Ltd. All Rights Reserved.,2,1.1 網(wǎng)絡(luò)編程簡(jiǎn)介,網(wǎng)絡(luò)編程 != 網(wǎng)站編程 MSN、QQ、聯(lián)眾的游戲這些是網(wǎng)絡(luò)編程 新浪、網(wǎng)易、搜狐這些動(dòng)態(tài)的網(wǎng)頁、網(wǎng)站都是網(wǎng)站編程。,2007 iSoftStone Holdings Ltd. All Rights Reserved.,3,1.1 網(wǎng)絡(luò)編程簡(jiǎn)介,計(jì)算機(jī)網(wǎng)絡(luò) 分布在不同地理區(qū)域的計(jì)算機(jī)與專門的外部設(shè)備用通信線路互連成一個(gè)規(guī)模大、功能強(qiáng)的網(wǎng)絡(luò)系統(tǒng),從而使眾多的計(jì)算機(jī)可以方便的互相傳遞信息,共享硬件、軟件、數(shù)據(jù)信息等資源。 外部設(shè)備:HUB、交換機(jī)、
2、路由器、網(wǎng)線、調(diào)至解調(diào)器等 網(wǎng)絡(luò)的主要功能 1、資源共享 2、信息傳輸與集中處理 3、綜合信息服務(wù)(萬維網(wǎng)、ISDN等),2007 iSoftStone Holdings Ltd. All Rights Reserved.,4,1.1 網(wǎng)絡(luò)編程簡(jiǎn)介,網(wǎng)絡(luò)通信協(xié)議 計(jì)算機(jī)網(wǎng)絡(luò)中實(shí)現(xiàn)通信必須有一些約定即通信協(xié)議。對(duì)速率、傳輸代碼、代碼結(jié)構(gòu)、傳輸控制步驟等制定標(biāo)準(zhǔn)。 比如人與人之間進(jìn)行交流,就要按約定的語言格式來進(jìn)行, 否則會(huì)造成交流的困難。 網(wǎng)絡(luò)通信接口 為了使兩點(diǎn)之間能進(jìn)行對(duì)話,必須在它們之間建立通信工具(即接口),使它們彼此能進(jìn)行信息交換。接口包括兩部分 硬件裝置:實(shí)現(xiàn)結(jié)點(diǎn)之間的信息傳送 軟件
3、裝置:規(guī)定雙方進(jìn)行通信的約定協(xié)議。,2007 iSoftStone Holdings Ltd. All Rights Reserved.,5,1.1 網(wǎng)絡(luò)編程簡(jiǎn)介,分層的思想 由于結(jié)點(diǎn)之間關(guān)系很復(fù)雜,在制定協(xié)議時(shí),把復(fù)雜成分分解成一些簡(jiǎn)單的成分,再將他們復(fù)合起來。最常用的復(fù)合方式是層次方式,即同層間可以通信,上一層可以調(diào)用下一層。而與再下一層不發(fā)生關(guān)系。各層互不影響。利于系統(tǒng)的開發(fā)和擴(kuò)展。 類似于公司的組織結(jié)構(gòu):董事會(huì)、總經(jīng)理、財(cái)務(wù)經(jīng)理、銷售經(jīng)理等等。只對(duì)上層領(lǐng)導(dǎo)負(fù)責(zé),不躍層處理問題。 參考標(biāo)準(zhǔn): 1、國際標(biāo)準(zhǔn)化組織的開放系統(tǒng)互聯(lián)模型 OSI 2、事實(shí)標(biāo)準(zhǔn)TCP/IP,2007 iSoftSt
4、one Holdings Ltd. All Rights Reserved.,6,1.1 網(wǎng)絡(luò)編程簡(jiǎn)介,2007 iSoftStone Holdings Ltd. All Rights Reserved.,7,1.1 網(wǎng)絡(luò)編程簡(jiǎn)介,2007 iSoftStone Holdings Ltd. All Rights Reserved.,8,1.1 網(wǎng)絡(luò)編程簡(jiǎn)介,類似于郵寄信件 把寫好的信用信封包好,裝到快遞袋里。再裝到大的郵寄包裹里。然后送到指定地方,打開包裹,打開快遞袋,撕開信紙。最后看到傳過來的數(shù)據(jù) 信。,2007 iSoftStone Holdings Ltd. All Rights Res
5、erved.,9,1.1 網(wǎng)絡(luò)編程簡(jiǎn)介,2007 iSoftStone Holdings Ltd. All Rights Reserved.,10,1.1 網(wǎng)絡(luò)編程簡(jiǎn)介,IP協(xié)議 它是網(wǎng)絡(luò)層的協(xié)議。支持網(wǎng)絡(luò)間互聯(lián)的數(shù)據(jù)報(bào)通信。為我們的每臺(tái)設(shè)備提供了一個(gè)唯一的IP地址。 TCP協(xié)議 是專門設(shè)計(jì)用于在因特網(wǎng)上提供可靠的、端到端的字節(jié)流通信的協(xié)議。是一種面向連接的協(xié)議。 連接的雙方都確認(rèn)連接后,才會(huì)開始發(fā)送數(shù)據(jù)。所以稱是可靠的。,2007 iSoftStone Holdings Ltd. All Rights Reserved.,11,1.1 socket 簡(jiǎn)介,一般的網(wǎng)絡(luò)編程都叫Socket編程。
6、JAVA也如此 包括Windows網(wǎng)絡(luò)編程,unixs網(wǎng)絡(luò)編程等都叫socket編程。 兩個(gè)JAVA應(yīng)用程序可通過一個(gè)雙向的網(wǎng)絡(luò)通信連接實(shí)現(xiàn)數(shù)據(jù)交換,這個(gè)雙向鏈路的一端稱為一個(gè)Socket. Socket通常用來實(shí)現(xiàn)ClientServer連接。 J包中定義的兩個(gè)類Socket和ServerSocket分別用來實(shí)現(xiàn)雙向連接的Client和Server端。 建立連接時(shí)所需的尋址信息為遠(yuǎn)程計(jì)算機(jī)的ip地址和端口號(hào)(Port number),2007 iSoftStone Holdings Ltd. All Rights Reserved.,12,1.1 socket 簡(jiǎn)介,端口號(hào)為了區(qū)別一臺(tái)機(jī)子上
7、運(yùn)行的不同應(yīng)用程序。一個(gè)端口號(hào)被一個(gè)程序占用后,其他程序就無法在使用了。但一個(gè)程序可以占用多個(gè)端口。(我們自己的程序使用1024以上的端口) 80:http21: ftp 110:pop3 25:smtp Socket套接字是網(wǎng)絡(luò)通信的一個(gè)重要機(jī)制, java采用的Socket通信是一種流式套接字通信,它使用TCP協(xié)議,通過面向連接服務(wù),實(shí)現(xiàn)客戶機(jī)與服務(wù)器之間的雙向且可靠的通信。系統(tǒng)包提供了ServerSocket類和Socket類,分別用于客戶端(Client)和服務(wù)器端(Server)。,2007 iSoftStone Holdings Ltd. All Rights Reserved.,
8、13,1.2 Socket通信機(jī)制,1. Socket通信的步驟 使用Socket進(jìn)行Client/Server程序設(shè)計(jì)的一般連接過程是這樣的:Server端Listen(監(jiān)聽)某個(gè)端口是否有連接請(qǐng)求,Client端向Server端發(fā)出Connect(連接)請(qǐng)求,Server端向Client端發(fā)回Accept(接受)消息。一個(gè)連接就建立起來了。Server端和Client端都可以通過Send,Write等方法與對(duì)方通信。,2007 iSoftStone Holdings Ltd. All Rights Reserved.,14,1.2 Socket通信機(jī)制,對(duì)于一個(gè)功能齊全的Socket,都要
9、包含以下基本結(jié)構(gòu),其工作過程包含以下四個(gè)基本的步驟:(1) 創(chuàng)建Socket;(2) 打開連接到Socket的輸入/出流;(3) 按照一定的協(xié)議對(duì)Socket進(jìn)行讀/寫操作;(4) 關(guān)閉Socket. 在創(chuàng)建socket時(shí)如果發(fā)生錯(cuò)誤,將產(chǎn)生IOException,在程序中必須對(duì)之作出處理。所以在創(chuàng)建Socket或ServerSocket是必須捕獲或拋出例外。,2007 iSoftStone Holdings Ltd. All Rights Reserved.,15,Socket類和ServerSocket類 包中提供了兩個(gè)類: Socket類和ServerSocket類,分別用于客戶端和服務(wù)
10、器端的通信 ,網(wǎng)絡(luò)通信的方法都封裝在這兩個(gè)類中。構(gòu)造方法包括: ServerSocket(int port) /在指定的端口上創(chuàng)建服務(wù)器Socket對(duì)象 ServerSocket(int port,int count) /在指定的端口上創(chuàng)建服務(wù)器Socket對(duì)象,并指定服務(wù)器能夠支持的最大連接數(shù),2007 iSoftStone Holdings Ltd. All Rights Reserved.,16, Socket(InetAddress IP,int port) /使用指定IP地址和端口建立Socket對(duì)象 Socket(String host,int port) /使用指定主機(jī)和端口建立
11、Socket對(duì)象 Socket(InetAddress IP,int port,boolean stream) /使用指定IP地址和端口建立Socket對(duì)象,布爾值stream表示是否采用流式通信方式 實(shí)例: D:TestSocket下的test1,test2,test3,2007 iSoftStone Holdings Ltd. All Rights Reserved.,17,2007 iSoftStone Holdings Ltd. All Rights Reserved.,18,下面是一個(gè)典型的創(chuàng)建客戶端Socket的過程。trySocket socket=new Socket(127.
12、0.0.1,4700); /是TCP/IP協(xié)議中默認(rèn)的本機(jī)地址catch(IOException e)System.out.println(Error:+e);這是最簡(jiǎn)單的在客戶端創(chuàng)建一個(gè)Socket的一個(gè)小程序段,也是使用Socket進(jìn)行網(wǎng)絡(luò)通訊的第一步,程序相當(dāng)簡(jiǎn)單,在這里不作過多解釋了。在后面的程序中會(huì)用到該小程序段。,2007 iSoftStone Holdings Ltd. All Rights Reserved.,19,下面是一個(gè)典型的創(chuàng)建Server端ServerSocket的過程。ServerSocket server=null;try server=new
13、ServerSocket(4700); /創(chuàng)建一個(gè)ServerSocket在端口4700監(jiān)聽客戶請(qǐng)求catch(IOException e)System.out.println(“can not listen to :”+e);Socket socket=null;try socket=server.accept(); /accept()是一個(gè)阻塞的方法,,2007 iSoftStone Holdings Ltd. All Rights Reserved.,20,一旦有客戶請(qǐng)求,它就會(huì)返回一個(gè)Socket對(duì)象用于同客戶進(jìn)行交互catch(IOException e)System.out.pri
14、ntln(Error:+e);以上的程序是Server的典型工作模式,只不過在這里Server只能接收一個(gè)請(qǐng)求,接受完后Server就退出了。實(shí)際的應(yīng)用中總是讓它不停的循環(huán)接收,一旦有客戶請(qǐng)求,Server總是會(huì)創(chuàng)建一個(gè)服務(wù)線程來服務(wù)新來的客戶,而自己繼續(xù)監(jiān)聽。,2007 iSoftStone Holdings Ltd. All Rights Reserved.,21,程序中accept()是一個(gè)阻塞函數(shù),所謂阻塞性方法就是說該方法被調(diào)用后,將等待客戶的請(qǐng)求,直到有一個(gè)客戶啟動(dòng)并請(qǐng)求連接到相同的端口,然后accept()返回一個(gè)對(duì)應(yīng)于客戶的socket。這時(shí),客戶方和服務(wù)方都建立了用于通信的s
15、ocket,接下來就是由各個(gè)socket分別打開各自的輸入/輸出流。,2007 iSoftStone Holdings Ltd. All Rights Reserved.,22,類Socket提供了方法getInputStream ()和getOutStream()來得到對(duì)應(yīng)的輸入/輸出流以進(jìn)行讀/寫操作,這兩個(gè)方法分別返回InputStream和OutputSteam類對(duì)象。為了便于讀/寫數(shù)據(jù),我們可以在返回的輸入/輸出流對(duì)象上建立過濾流,如DataInputStream、DataOutputStream或PrintStream類對(duì)象,對(duì)于文本方式流對(duì)象,可以采用InputStreamRea
16、der和OutputStreamWriter、PrintWirter等處理。,2007 iSoftStone Holdings Ltd. All Rights Reserved.,23,例如: PrintStream os=new PrintStream(new BufferedOutputStreem(socket.getOutputStream(); DataInputStream is=new DataInputStream(socket.getInputStream(); PrintWriter out=new PrintWriter(socket.getOutStream(),tru
17、e); BufferedReader in=new ButfferedReader(new InputSteramReader(Socket.getInputStream();,2007 iSoftStone Holdings Ltd. All Rights Reserved.,24,輸入輸出流是網(wǎng)絡(luò)編程的實(shí)質(zhì)性部分,具體如何構(gòu)造所需要的過濾流,要根據(jù)需要而定,能否運(yùn)用自如主要看讀者對(duì)Java中輸入輸出部分掌握如何,2007 iSoftStone Holdings Ltd. All Rights Reserved.,25,每一個(gè)Socket存在時(shí),都將占用一定的資源,在Socket對(duì)象使用完畢
18、時(shí),要其關(guān)閉。關(guān)閉Socket可以調(diào)用Socket的Close()方法。在關(guān)閉Socket之前,應(yīng)將與Socket相關(guān)的所有的輸入/輸出流全部關(guān)閉,以釋放所有的資源。而且要注意關(guān)閉的順序,與Socket相關(guān)的所有的輸入/輸出該首先關(guān)閉,然后再關(guān)閉Socket。os.close();is.close();socket.close();,2007 iSoftStone Holdings Ltd. All Rights Reserved.,26,盡管Java有自動(dòng)回收機(jī)制,網(wǎng)絡(luò)資源最終是會(huì)被釋放的。但是為了有效的利用資源,建議讀者按照合理的順序主動(dòng)釋放資源。,2007 iSoftStone Hold
19、ings Ltd. All Rights Reserved.,27,1. 客戶端程序import java.io.*;import .*;public class TalkClient public static void main(String args) try Socket socket=new Socket(,4700); /向本機(jī)的4700端口發(fā)出客戶請(qǐng)求 BufferedReader sin=new BufferedReader(new InputStreamReader(System.in); /由系統(tǒng)標(biāo)準(zhǔn)輸入設(shè)備構(gòu)造BufferedReader對(duì)象PrintW
20、riter os=new PrintWriter(socket.getOutputStream();/由Socket對(duì)象得到輸出流,并構(gòu)造PrintWriter對(duì)象,2007 iSoftStone Holdings Ltd. All Rights Reserved.,28,PrintWriter os=new PrintWriter(socket.getOutputStream();/由Socket對(duì)象得到輸出流,并構(gòu)造PrintWriter對(duì)象 BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInput
21、Stream(); /由Socket對(duì)象得到輸入流,并構(gòu)造相應(yīng)的BufferedReader對(duì)象,2007 iSoftStone Holdings Ltd. All Rights Reserved.,29,String readline;readline=sin.readLine(); /從系統(tǒng)標(biāo)準(zhǔn)輸入讀入一字符串while(!readline.equals(bye) /若從標(biāo)準(zhǔn)輸入讀入的字符串為 bye則停止循環(huán)os.println(readline); /將從系統(tǒng)標(biāo)準(zhǔn)輸入讀入的字符串輸出到Serveros.flush(); /刷新輸出流,使Server馬上收到該字符串System.out.
22、println(Client:+readline); /在系統(tǒng)標(biāo)準(zhǔn)輸出上打印讀入的字符串System.out.println(Server:+is.readLine(); /從Server讀入一字符串,并打印到標(biāo)準(zhǔn)輸出上readline=sin.readLine(); /從系統(tǒng)標(biāo)準(zhǔn)輸入讀入一字符串 /繼續(xù)循環(huán)os.close(); /關(guān)閉Socket輸出流is.close(); /關(guān)閉Socket輸入流socket.close(); /關(guān)閉Socketcatch(Exception e) System.out.println(Error+e); /出錯(cuò),則打印出錯(cuò)信息,2007 iSoftSt
23、one Holdings Ltd. All Rights Reserved.,30,os.close(); /關(guān)閉Socket輸出流 is.close(); /關(guān)閉Socket輸入流 socket.close(); /關(guān)閉Socketcatch(Exception e) System.out.println(Error+e); /出錯(cuò),則打印出錯(cuò)信息,2007 iSoftStone Holdings Ltd. All Rights Reserved.,31,2. 服務(wù)器端程序 import java.io.*;import .*;import java.applet.Applet;public
24、 class TalkServerpublic static void main(String args) tryServerSocket server=null;try server=new ServerSocket(4700); /創(chuàng)建一個(gè)ServerSocket在端口4700監(jiān)聽客戶請(qǐng)求catch(Exception e) System.out.println(can not listen to:+e); /出錯(cuò),打印出錯(cuò)信息 Socket socket=null;trysocket=server.accept(); /使用accept()阻塞等待客戶請(qǐng)求,有客戶/請(qǐng)求到來則產(chǎn)生一個(gè)So
25、cket對(duì)象,并繼續(xù)執(zhí)行catch(Exception e) System.out.println(Error.+e); /出錯(cuò),打印出錯(cuò)信息,2007 iSoftStone Holdings Ltd. All Rights Reserved.,32,2. 服務(wù)器端程序 import java.io.*;import .*;import java.applet.Applet;public class TalkServerpublic static void main(String args) tryServerSocket server=null;try server=new ServerSo
26、cket(4700); /創(chuàng)建一個(gè)ServerSocket在端口4700監(jiān)聽客戶請(qǐng)求catch(Exception e) System.out.println(can not listen to:+e); /出錯(cuò),打印出錯(cuò)信息 Socket socket=null;trysocket=server.accept(); /使用accept()阻塞等待客戶請(qǐng)求,有客戶/請(qǐng)求到來則產(chǎn)生一個(gè)Socket對(duì)象,并繼續(xù)執(zhí)行catch(Exception e) System.out.println(Error.+e); /出錯(cuò),打印出錯(cuò)信息,2007 iSoftStone Holdings Ltd. All Rights Reserved.,33,String line;BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInput
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 國家電網(wǎng)電氣安全工作知識(shí)相關(guān)試題測(cè)試卷
- 深圳小考試題及答案
- 2025-2031年中國鈦合金棒絲材行業(yè)市場(chǎng)全景調(diào)研及發(fā)展趨向研判報(bào)告
- 滌綸針刺氈項(xiàng)目經(jīng)濟(jì)效益評(píng)估
- AI大模型智慧養(yǎng)老監(jiān)護(hù)平臺(tái)建設(shè)方案
- 支教訪談?lì)}目大全及答案
- 政治價(jià)值追求題目及答案
- 2025至2030年中國車速反饋儀行業(yè)投資前景及策略咨詢報(bào)告
- 2025至2030年中國刨花板網(wǎng)帶行業(yè)投資前景及策略咨詢報(bào)告
- 河北省衡水市深州深州鎮(zhèn)中學(xué)2025屆高一下化學(xué)期末經(jīng)典試題含解析
- 《中華人民共和國學(xué)前教育法》專題培訓(xùn)
- 國開(四川)2024年秋《社會(huì)學(xué)概論》形考任務(wù)1-2答案終結(jié)性考核答案
- SAP S4HANA 用戶操作手冊(cè)-FICO-006-財(cái)務(wù)月結(jié)
- 電商平臺(tái)供應(yīng)鏈管理技術(shù)分析
- 燃油燃燒器常見故障現(xiàn)象的原因分析及排除方法
- 北京匯文中學(xué)初一新生分班(摸底)語文考試模擬試卷(10套試卷帶答案解析)
- DL∕T 901-2017 火力發(fā)電廠煙囪(煙道)防腐蝕材料
- GB/T 4074.1-2024繞組線試驗(yàn)方法第1部分:一般規(guī)定
- MOOC 集成電路設(shè)計(jì)基礎(chǔ)-華中科技大學(xué) 中國大學(xué)慕課答案
- 數(shù)學(xué)分析教學(xué)課件
- 地震反演原理課件
評(píng)論
0/150
提交評(píng)論