第十課《Socket編程》.ppt_第1頁
第十課《Socket編程》.ppt_第2頁
第十課《Socket編程》.ppt_第3頁
第十課《Socket編程》.ppt_第4頁
第十課《Socket編程》.ppt_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、第八課Socket編程,2007 iSoftStone Holdings Ltd. All Rights Reserved.,2,1.1 網(wǎng)絡(luò)編程簡介,網(wǎng)絡(luò)編程 != 網(wǎng)站編程 MSN、QQ、聯(lián)眾的游戲這些是網(wǎng)絡(luò)編程 新浪、網(wǎng)易、搜狐這些動態(tài)的網(wǎng)頁、網(wǎng)站都是網(wǎng)站編程。,2007 iSoftStone Holdings Ltd. All Rights Reserved.,3,1.1 網(wǎng)絡(luò)編程簡介,計算機網(wǎng)絡(luò) 分布在不同地理區(qū)域的計算機與專門的外部設(shè)備用通信線路互連成一個規(guī)模大、功能強的網(wǎng)絡(luò)系統(tǒng),從而使眾多的計算機可以方便的互相傳遞信息,共享硬件、軟件、數(shù)據(jù)信息等資源。 外部設(shè)備:HUB、交換機、

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ò)編程簡介,網(wǎng)絡(luò)通信協(xié)議 計算機網(wǎng)絡(luò)中實現(xiàn)通信必須有一些約定即通信協(xié)議。對速率、傳輸代碼、代碼結(jié)構(gòu)、傳輸控制步驟等制定標(biāo)準(zhǔn)。 比如人與人之間進行交流,就要按約定的語言格式來進行, 否則會造成交流的困難。 網(wǎng)絡(luò)通信接口 為了使兩點之間能進行對話,必須在它們之間建立通信工具(即接口),使它們彼此能進行信息交換。接口包括兩部分 硬件裝置:實現(xiàn)結(jié)點之間的信息傳送 軟件

3、裝置:規(guī)定雙方進行通信的約定協(xié)議。,2007 iSoftStone Holdings Ltd. All Rights Reserved.,5,1.1 網(wǎng)絡(luò)編程簡介,分層的思想 由于結(jié)點之間關(guān)系很復(fù)雜,在制定協(xié)議時,把復(fù)雜成分分解成一些簡單的成分,再將他們復(fù)合起來。最常用的復(fù)合方式是層次方式,即同層間可以通信,上一層可以調(diào)用下一層。而與再下一層不發(fā)生關(guān)系。各層互不影響。利于系統(tǒng)的開發(fā)和擴展。 類似于公司的組織結(jié)構(gòu):董事會、總經(jīng)理、財務(wù)經(jīng)理、銷售經(jīng)理等等。只對上層領(lǐng)導(dǎo)負責(zé),不躍層處理問題。 參考標(biāo)準(zhǔn): 1、國際標(biāo)準(zhǔn)化組織的開放系統(tǒng)互聯(lián)模型 OSI 2、事實標(biāo)準(zhǔn)TCP/IP,2007 iSoftSt

4、one Holdings Ltd. All Rights Reserved.,6,1.1 網(wǎng)絡(luò)編程簡介,2007 iSoftStone Holdings Ltd. All Rights Reserved.,7,1.1 網(wǎng)絡(luò)編程簡介,2007 iSoftStone Holdings Ltd. All Rights Reserved.,8,1.1 網(wǎng)絡(luò)編程簡介,類似于郵寄信件 把寫好的信用信封包好,裝到快遞袋里。再裝到大的郵寄包裹里。然后送到指定地方,打開包裹,打開快遞袋,撕開信紙。最后看到傳過來的數(shù)據(jù) 信。,2007 iSoftStone Holdings Ltd. All Rights Res

5、erved.,9,1.1 網(wǎng)絡(luò)編程簡介,2007 iSoftStone Holdings Ltd. All Rights Reserved.,10,1.1 網(wǎng)絡(luò)編程簡介,IP協(xié)議 它是網(wǎng)絡(luò)層的協(xié)議。支持網(wǎng)絡(luò)間互聯(lián)的數(shù)據(jù)報通信。為我們的每臺設(shè)備提供了一個唯一的IP地址。 TCP協(xié)議 是專門設(shè)計用于在因特網(wǎng)上提供可靠的、端到端的字節(jié)流通信的協(xié)議。是一種面向連接的協(xié)議。 連接的雙方都確認連接后,才會開始發(fā)送數(shù)據(jù)。所以稱是可靠的。,2007 iSoftStone Holdings Ltd. All Rights Reserved.,11,1.1 socket 簡介,一般的網(wǎng)絡(luò)編程都叫Socket編程。

6、JAVA也如此 包括Windows網(wǎng)絡(luò)編程,unixs網(wǎng)絡(luò)編程等都叫socket編程。 兩個JAVA應(yīng)用程序可通過一個雙向的網(wǎng)絡(luò)通信連接實現(xiàn)數(shù)據(jù)交換,這個雙向鏈路的一端稱為一個Socket. Socket通常用來實現(xiàn)ClientServer連接。 J包中定義的兩個類Socket和ServerSocket分別用來實現(xiàn)雙向連接的Client和Server端。 建立連接時所需的尋址信息為遠程計算機的ip地址和端口號(Port number),2007 iSoftStone Holdings Ltd. All Rights Reserved.,12,1.1 socket 簡介,端口號為了區(qū)別一臺機子上

7、運行的不同應(yīng)用程序。一個端口號被一個程序占用后,其他程序就無法在使用了。但一個程序可以占用多個端口。(我們自己的程序使用1024以上的端口) 80:http21: ftp 110:pop3 25:smtp Socket套接字是網(wǎng)絡(luò)通信的一個重要機制, java采用的Socket通信是一種流式套接字通信,它使用TCP協(xié)議,通過面向連接服務(wù),實現(xiàn)客戶機與服務(wù)器之間的雙向且可靠的通信。系統(tǒng)包提供了ServerSocket類和Socket類,分別用于客戶端(Client)和服務(wù)器端(Server)。,2007 iSoftStone Holdings Ltd. All Rights Reserved.,

8、13,1.2 Socket通信機制,1. Socket通信的步驟 使用Socket進行Client/Server程序設(shè)計的一般連接過程是這樣的:Server端Listen(監(jiān)聽)某個端口是否有連接請求,Client端向Server端發(fā)出Connect(連接)請求,Server端向Client端發(fā)回Accept(接受)消息。一個連接就建立起來了。Server端和Client端都可以通過Send,Write等方法與對方通信。,2007 iSoftStone Holdings Ltd. All Rights Reserved.,14,1.2 Socket通信機制,對于一個功能齊全的Socket,都要

9、包含以下基本結(jié)構(gòu),其工作過程包含以下四個基本的步驟:(1) 創(chuàng)建Socket;(2) 打開連接到Socket的輸入/出流;(3) 按照一定的協(xié)議對Socket進行讀/寫操作;(4) 關(guān)閉Socket. 在創(chuàng)建socket時如果發(fā)生錯誤,將產(chǎn)生IOException,在程序中必須對之作出處理。所以在創(chuàng)建Socket或ServerSocket是必須捕獲或拋出例外。,2007 iSoftStone Holdings Ltd. All Rights Reserved.,15,Socket類和ServerSocket類 包中提供了兩個類: Socket類和ServerSocket類,分別用于客戶端和服務(wù)

10、器端的通信 ,網(wǎng)絡(luò)通信的方法都封裝在這兩個類中。構(gòu)造方法包括: ServerSocket(int port) /在指定的端口上創(chuàng)建服務(wù)器Socket對象 ServerSocket(int port,int count) /在指定的端口上創(chuàng)建服務(wù)器Socket對象,并指定服務(wù)器能夠支持的最大連接數(shù),2007 iSoftStone Holdings Ltd. All Rights Reserved.,16, Socket(InetAddress IP,int port) /使用指定IP地址和端口建立Socket對象 Socket(String host,int port) /使用指定主機和端口建立

11、Socket對象 Socket(InetAddress IP,int port,boolean stream) /使用指定IP地址和端口建立Socket對象,布爾值stream表示是否采用流式通信方式 實例: D:TestSocket下的test1,test2,test3,2007 iSoftStone Holdings Ltd. All Rights Reserved.,17,2007 iSoftStone Holdings Ltd. All Rights Reserved.,18,下面是一個典型的創(chuàng)建客戶端Socket的過程。trySocket socket=new Socket(127.

12、0.0.1,4700); /是TCP/IP協(xié)議中默認的本機地址catch(IOException e)System.out.println(Error:+e);這是最簡單的在客戶端創(chuàng)建一個Socket的一個小程序段,也是使用Socket進行網(wǎng)絡(luò)通訊的第一步,程序相當(dāng)簡單,在這里不作過多解釋了。在后面的程序中會用到該小程序段。,2007 iSoftStone Holdings Ltd. All Rights Reserved.,19,下面是一個典型的創(chuàng)建Server端ServerSocket的過程。ServerSocket server=null;try server=new

13、ServerSocket(4700); /創(chuàng)建一個ServerSocket在端口4700監(jiān)聽客戶請求catch(IOException e)System.out.println(“can not listen to :”+e);Socket socket=null;try socket=server.accept(); /accept()是一個阻塞的方法,,2007 iSoftStone Holdings Ltd. All Rights Reserved.,20,一旦有客戶請求,它就會返回一個Socket對象用于同客戶進行交互catch(IOException e)System.out.pri

14、ntln(Error:+e);以上的程序是Server的典型工作模式,只不過在這里Server只能接收一個請求,接受完后Server就退出了。實際的應(yīng)用中總是讓它不停的循環(huán)接收,一旦有客戶請求,Server總是會創(chuàng)建一個服務(wù)線程來服務(wù)新來的客戶,而自己繼續(xù)監(jiān)聽。,2007 iSoftStone Holdings Ltd. All Rights Reserved.,21,程序中accept()是一個阻塞函數(shù),所謂阻塞性方法就是說該方法被調(diào)用后,將等待客戶的請求,直到有一個客戶啟動并請求連接到相同的端口,然后accept()返回一個對應(yīng)于客戶的socket。這時,客戶方和服務(wù)方都建立了用于通信的s

15、ocket,接下來就是由各個socket分別打開各自的輸入/輸出流。,2007 iSoftStone Holdings Ltd. All Rights Reserved.,22,類Socket提供了方法getInputStream ()和getOutStream()來得到對應(yīng)的輸入/輸出流以進行讀/寫操作,這兩個方法分別返回InputStream和OutputSteam類對象。為了便于讀/寫數(shù)據(jù),我們可以在返回的輸入/輸出流對象上建立過濾流,如DataInputStream、DataOutputStream或PrintStream類對象,對于文本方式流對象,可以采用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ò)編程的實質(zhì)性部分,具體如何構(gòu)造所需要的過濾流,要根據(jù)需要而定,能否運用自如主要看讀者對Java中輸入輸出部分掌握如何,2007 iSoftStone Holdings Ltd. All Rights Reserved.,25,每一個Socket存在時,都將占用一定的資源,在Socket對象使用完畢

18、時,要其關(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有自動回收機制,網(wǎng)絡(luò)資源最終是會被釋放的。但是為了有效的利用資源,建議讀者按照合理的順序主動釋放資源。,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); /向本機的4700端口發(fā)出客戶請求 BufferedReader sin=new BufferedReader(new InputStreamReader(System.in); /由系統(tǒng)標(biāo)準(zhǔn)輸入設(shè)備構(gòu)造BufferedReader對象PrintW

20、riter os=new PrintWriter(socket.getOutputStream();/由Socket對象得到輸出流,并構(gòu)造PrintWriter對象,2007 iSoftStone Holdings Ltd. All Rights Reserved.,28,PrintWriter os=new PrintWriter(socket.getOutputStream();/由Socket對象得到輸出流,并構(gòu)造PrintWriter對象 BufferedReader is=new BufferedReader(new InputStreamReader(socket.getInput

21、Stream(); /由Socket對象得到輸入流,并構(gòu)造相應(yīng)的BufferedReader對象,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); /出錯,則打印出錯信息,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); /出錯,則打印出錯信息,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)建一個ServerSocket在端口4700監(jiān)聽客戶請求catch(Exception e) System.out.println(can not listen to:+e); /出錯,打印出錯信息 Socket socket=null;trysocket=server.accept(); /使用accept()阻塞等待客戶請求,有客戶/請求到來則產(chǎn)生一個So

25、cket對象,并繼續(xù)執(zhí)行catch(Exception e) System.out.println(Error.+e); /出錯,打印出錯信息,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)建一個ServerSocket在端口4700監(jiān)聽客戶請求catch(Exception e) System.out.println(can not listen to:+e); /出錯,打印出錯信息 Socket socket=null;trysocket=server.accept(); /使用accept()阻塞等待客戶請求,有客戶/請求到來則產(chǎn)生一個Socket對象,并繼續(xù)執(zhí)行catch(Exception e) System.out.println(Error.+e); /出錯,打印出錯信息,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等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論