版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、深入Java編程,專業(yè)教程,理論講解部分,Ver3.1,第049課 網(wǎng)絡(luò)編程,概述:,網(wǎng)絡(luò)程序設(shè)計(jì)概述 Socket網(wǎng)絡(luò)程序設(shè)計(jì),重點(diǎn):,難點(diǎn):,Socket網(wǎng)絡(luò)程序設(shè)計(jì),Socket網(wǎng)絡(luò)程序設(shè)計(jì),1 java網(wǎng)絡(luò)編程概述,第049課 網(wǎng)絡(luò)編程,在java中對(duì)網(wǎng)絡(luò)的操作就像對(duì)文件操作一樣方便.,可以使用多線程來(lái)實(shí)現(xiàn)同時(shí)對(duì)多個(gè)網(wǎng)絡(luò)連接進(jìn)行處理,1.1 計(jì)算機(jī)的識(shí)別,在你想要連接到另外一臺(tái)計(jì)算機(jī)上的時(shí)候,一定要使用某種方法來(lái)確定在網(wǎng)絡(luò)上的你要連接的計(jì)算機(jī).,第049課 網(wǎng)絡(luò)編程,第一種就是我們常見(jiàn)的DNS.這是一種用單詞組成得地址.我們經(jīng)常訪問(wèn)網(wǎng)站使用得就是DNS地址.例如,第二種就是用點(diǎn)”.”分
2、隔開(kāi)得4組數(shù)字組成得地址.例如:,這里要介紹的就是已經(jīng)成熟的IP地址.IP地址有兩種表達(dá)格式:,1 java網(wǎng)絡(luò)編程概述,第049課 網(wǎng)絡(luò)編程,無(wú)論什么格式,IP地址內(nèi)部的表示都是一個(gè)32位得數(shù)字,所以在用數(shù)字表示得方式下每一個(gè)區(qū)域都不能超過(guò)255.,在java中可以使用InetAddress類來(lái)創(chuàng)建一個(gè)特殊得對(duì)象來(lái)保存這個(gè)地址.馬上你將看到可以利用這個(gè)地址對(duì)象來(lái)創(chuàng)建一個(gè)socket.,1.1 計(jì)算機(jī)的識(shí)別,1 java網(wǎng)絡(luò)編程概述,第049課 網(wǎng)絡(luò)編程,1.2 服務(wù)器與客戶端,網(wǎng)絡(luò)連接不過(guò)就是兩臺(tái)計(jì)算機(jī)之間進(jìn)行連接并且相互發(fā)送消息.一旦兩臺(tái)計(jì)算機(jī)發(fā)現(xiàn)了對(duì)方,那么就可以建立一
3、個(gè)雙向得連接.,這就好像是兩個(gè)人在游樂(lè)園走散了一樣,他們?nèi)绾握业綄?duì)方:一臺(tái)計(jì)算機(jī)站在那里原地不動(dòng),仔細(xì)得聽(tīng)著,另外一臺(tái)計(jì)算機(jī)大聲喊道:”你在哪啊?!”,1 java網(wǎng)絡(luò)編程概述,第049課 網(wǎng)絡(luò)編程,那個(gè)站在原地不動(dòng)得計(jì)算機(jī)稱作服務(wù)器,另外一個(gè)稱作客戶端.,服務(wù)器得任務(wù)就是負(fù)責(zé)監(jiān)聽(tīng)連接,客戶端得任務(wù)就是嘗試去連接到服務(wù)器.,它們得區(qū)別僅僅是在相互尋找得過(guò)程中.一旦它們建立了雙向連接,那么誰(shuí)是服務(wù)器誰(shuí)是客戶端就無(wú)所謂了.,1.2 服務(wù)器與客戶端,1 java網(wǎng)絡(luò)編程概述,第049課 網(wǎng)絡(luò)編程,IP地址創(chuàng)建了一個(gè)特殊得地址被稱作本地地址(localhost)用來(lái)做沒(méi)有網(wǎng)絡(luò)資源得測(cè)試.在java中通
4、常使用如下方法獲得這個(gè)地址:,如果你將參數(shù)置null,那么它將返回一個(gè)本地地址.這個(gè)地址只能用在這個(gè)特殊得環(huán)境下,所以在你打算使用在網(wǎng)絡(luò)上時(shí)需要對(duì)這個(gè)地址進(jìn)行處理.,InetAddress addr = InetAddress.getByName(null);,1.2 服務(wù)器與客戶端,1 java網(wǎng)絡(luò)編程概述,第049課 網(wǎng)絡(luò)編程,1.3 端口,一個(gè)IP地址不能夠準(zhǔn)確得確定一個(gè)服務(wù),因?yàn)樵谝慌_(tái)服務(wù)器上會(huì)同時(shí)有很多得服務(wù)存在.,端口不是一個(gè)物理設(shè)備,只是一個(gè)軟件上對(duì)服務(wù)得一個(gè)標(biāo)識(shí). 在服務(wù)器上每一個(gè)端口代表唯一個(gè)服務(wù),客戶端應(yīng)該在連接之前知道這個(gè)端口.,系統(tǒng)將1-1024作為保留端口,以提供系統(tǒng)
5、服務(wù).所以你應(yīng)該使用其它的端口.,1 java網(wǎng)絡(luò)編程概述,2 Sockets,第049課 網(wǎng)絡(luò)編程,Socket是在軟件層對(duì)通訊兩個(gè)端點(diǎn)的抽象.對(duì)于一個(gè)給定得連接,在每一臺(tái)機(jī)器上都有它們自己的socket.,在java中.我們使用socket來(lái)建立計(jì)算機(jī)間的相互連接,然后我們通過(guò)socket得到輸入輸出流(InputStream and OutputStream ),使用這些IO流來(lái)傳送我們要發(fā)送的消息.我們現(xiàn)在擁有兩類socket使用:,SeverSocket,這是為服務(wù)器準(zhǔn)備的.用來(lái)監(jiān)聽(tīng)客戶端的連接.,Socket,這是客戶端用來(lái)連接服務(wù)器使用的.,第049課 網(wǎng)絡(luò)編程,當(dāng)客戶端創(chuàng)建了一
6、個(gè)到服務(wù)器的連接,服務(wù)器會(huì)返回(通過(guò)accept()一個(gè)Socket來(lái)表述與客戶端的連接.,Socket,從這時(shí)起,你就擁有了一個(gè)真正的Socket到Socket的連接,并且它們之間毫無(wú)差別.,2 Sockets,第049課 網(wǎng)絡(luò)編程,它是服務(wù)器的連接器.它實(shí)際的工作就是等待這其他的機(jī)器來(lái)連接它,然后它會(huì)生成一個(gè)真正的Socket來(lái)進(jìn)行連接.,你只需要一個(gè)端口就可以創(chuàng)建ServerSocket.你不必指定任何IP,因?yàn)樗褪悄惚镜貦C(jī)器的IP. 當(dāng)連接創(chuàng)建后,ServerSocket會(huì)得到連接進(jìn)來(lái)的Socket的地址信息.,ServerSocket,2 Sockets,第049課 網(wǎng)絡(luò)編程,2.
7、1 例子,服務(wù)器首先監(jiān)聽(tīng)一個(gè)網(wǎng)絡(luò)連接,當(dāng)連接成功建立以后,得到InputStream和OutputStream.,例子描述,他們通過(guò)Reader和Writer裝飾一下,然后在經(jīng)過(guò)BufferedReader 和PrintWriter的裝飾.此時(shí)開(kāi)始真正的信息傳遞.,服務(wù)器會(huì)從BufferedReader讀出所有從客戶端發(fā)送的消息并從PrintWriter發(fā)送出去,直到收到”END”為止.然后關(guān)閉網(wǎng)絡(luò)連接.,2 Sockets,第049課 網(wǎng)絡(luò)編程,客戶端創(chuàng)建一個(gè)Socket來(lái)連接到服務(wù)器,然后像服務(wù)器一樣創(chuàng)建IO流并裝飾一下.然后發(fā)送幾行文本信息,同時(shí)注意收聽(tīng)服務(wù)器會(huì)有什么反應(yīng).,2.1 例子
8、,2 Sockets,第049課 網(wǎng)絡(luò)編程,import java.io.*; import .*; public class JabberServer public static final int PORT = 8080; public static void main(String args) throws IOException ServerSocket s = new ServerSocket(PORT); System.out.println(Started: + s); try Socket socket = s.accept(); try System.out.println(
9、 Connection accepted: + socket); BufferedReader in = new BufferedReader( new InputStreamReader( socket.getInputStream();,line: 01,line: 02,line: 03,2.1 例子,2 Sockets,第049課 網(wǎng)絡(luò)編程,PrintWriter out = new PrintWriter( new BufferedWriter( new OutputStreamWriter( socket.getOutputStream(),true); while (true)
10、String str = in.readLine(); if (str.equals(END) break; System.out.println(Echoing: + str); out.println(str); finally System.out.println(closing.); socket.close(); finally s.close(); /:,line: 04,line: 05,2.1 例子,2 Sockets,第049課 網(wǎng)絡(luò)編程,line:01,這里你會(huì)看到到,創(chuàng)建一個(gè)ServerSocket只需要一個(gè)端口(port).,line: 03,當(dāng)調(diào)用accept()的時(shí)
11、候,這個(gè)函數(shù)會(huì)發(fā)生阻塞直到有客戶端連接進(jìn)來(lái).在它等待連接的時(shí)候其他的線程是可以正常運(yùn)行的.當(dāng)一個(gè)連接創(chuàng)建后,accept()會(huì)返回一個(gè)Socket對(duì)象用來(lái)描述這個(gè)連接.,2.1 例子,2 Sockets,第049課 網(wǎng)絡(luò)編程,這里我們要注意確保sockets能夠被干凈的清除.,line: 02,try-finally塊會(huì)保證無(wú)論任何情況,ServerSocket都會(huì)被安全的關(guān)閉.,line: 05,line: 03,line: 04,try-finally塊來(lái)保證Soecket可以被安全的關(guān)閉.,Socket是非常重要的內(nèi)存資源,所以使用時(shí)要非常的小心.你必須確保Socket能夠正確的清除.,
12、2.1 例子,2 Sockets,第049課 網(wǎng)絡(luò)編程,下面我們來(lái)看看客戶端是如何利用創(chuàng)建的Socket來(lái)生成IO流進(jìn)行讀寫操作的.,將InputStream和OutputStream兩個(gè)對(duì)象分別用InputStreamReader和OutputStreamWriter包裝一下.,然后,利用InputStreamReader和OutputStreamWriter對(duì)需要在網(wǎng)絡(luò)傳輸?shù)臄?shù)據(jù)進(jìn)行處理,2.1 例子,2 Sockets,第049課 網(wǎng)絡(luò)編程,import .*; import java.io.*; public class JabberClient public static void
13、main(String args) throws IOException InetAddress addr = InetAddress.getByName(null); System.out.println(addr = + addr); Socket socket = new Socket(addr, JabberServer.PORT); try System.out.println(socket = + socket); BufferedReader in = new BufferedReader( new InputStreamReader(socket.getInputStream(
14、);,2.1 例子,2 Sockets,第049課 網(wǎng)絡(luò)編程,PrintWriter out = new PrintWriter(new BufferedWriter( new OutputStreamWriter(socket.getOutputStream(),true); for(int i = 0; i 10; i +) out.println(howdy + i); String str = in.readLine(); System.out.println(str); out.println(END); finally System.out.println(closing.); s
15、ocket.close(); /:,2.1 例子,2 Sockets,小結(jié):,IP地址 端口 ServerSocket Socket flush操作,第049課 網(wǎng)絡(luò)編程,1、如下不是IP地址的是( ) A) B) C) D) 2、一個(gè)網(wǎng)絡(luò)連接首先是由誰(shuí)發(fā)起的( ) A)服務(wù)器 B)路由器 C)客戶端 D)網(wǎng)關(guān) 3、能夠監(jiān)聽(tīng)網(wǎng)絡(luò)連接的類是( ) A)ServerSocket B)Socekt C)Flush D)PrintWriter,小測(cè)驗(yàn)(單選題):,第049課 網(wǎng)絡(luò)編程,1、如下不是IP地址的是( c) A)192.16
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 七年級(jí)上冊(cè)人教版歷史知識(shí)點(diǎn)總結(jié)
- 2025健身房教練聘用合同
- 課題申報(bào)參考:領(lǐng)導(dǎo)差錯(cuò)取向?qū)苿?chuàng)企業(yè)雙元綠色創(chuàng)新的跨層次傳導(dǎo)及干預(yù)機(jī)制研究
- 跨文化教育中的創(chuàng)新教學(xué)方法探討
- 2024年壓敏熱熔膠項(xiàng)目資金需求報(bào)告代可行性研究報(bào)告
- 2024年核電站用過(guò)濾氈項(xiàng)目資金需求報(bào)告代可行性研究報(bào)告
- 趣味數(shù)學(xué)在辦公中的應(yīng)用
- 中考生物一輪復(fù)習(xí)抓重點(diǎn)考典型專題19 生物的生殖和發(fā)育(含解析)
- 個(gè)人承包物業(yè)清潔維護(hù)服務(wù)合同2024年度3篇
- 2025年浙科版必修2物理下冊(cè)階段測(cè)試試卷含答案
- 衛(wèi)生服務(wù)個(gè)人基本信息表
- 醫(yī)學(xué)脂質(zhì)的構(gòu)成功能及分析專題課件
- 高技能人才培養(yǎng)的策略創(chuàng)新與實(shí)踐路徑
- 廣東省湛江市廉江市2023-2024學(xué)年八年級(jí)上學(xué)期期末考試數(shù)學(xué)試卷(含答案)
- 2024年湖北省知名中小學(xué)教聯(lián)體聯(lián)盟中考語(yǔ)文一模試卷
- 安徽省蕪湖市2023-2024學(xué)年高一上學(xué)期期末考試 生物 含解析
- 燃?xì)庑袠I(yè)有限空間作業(yè)安全管理制度
- JB T 7946.1-2017鑄造鋁合金金相
- 包裝過(guò)程質(zhì)量控制
- 通用電子嘉賓禮薄
- 赤峰市海業(yè)礦產(chǎn)有限責(zé)任公司福合元礦區(qū)銅鉬礦2022年度礦山地質(zhì)環(huán)境治理與土地復(fù)墾方案
評(píng)論
0/150
提交評(píng)論