想了解java中的網(wǎng)絡(luò )編程嗎?想了解Java網(wǎng)絡(luò )編程(一):初體驗?? 嗎?......本文帶你一探究竟。
1.Java網(wǎng)絡(luò )編程(一):初體驗
有同學(xué)反應,光寫(xiě)數據結構太枯燥了,能不能搞點(diǎn)有趣的東西。嗯,我決定把網(wǎng)絡(luò )這一部分提到前邊來(lái),做一點(diǎn)有趣的東西。這節課,我們體驗一下Java網(wǎng)絡(luò )編程。Java語(yǔ)言被越來(lái)越多地應用在網(wǎng)絡(luò )環(huán)境下,偏重于服務(wù)端的開(kāi)發(fā),還有分布式系統,軟件定義硬件功能的場(chǎng)景等等。這些場(chǎng)景下,都非常依賴(lài)于語(yǔ)言的網(wǎng)絡(luò )開(kāi)發(fā)的能力。我們今天就嘗試使用一下Java的網(wǎng)絡(luò )編程。Java的網(wǎng)絡(luò )編程的接口大多數位于 和 java.nio 這兩個(gè)package里,掌握這兩個(gè)package是Java程序員必備的基礎技能。服務(wù)端連接網(wǎng)絡(luò )的過(guò)程和打電話(huà)的過(guò)程可以進(jìn)行類(lèi)比。比如,在手機網(wǎng)絡(luò )中,每一個(gè)手機都有一個(gè)手機號,我們知道了某個(gè)提供服務(wù)的號碼(比如外賣(mài)電話(huà),銀行電話(huà)等),撥通這個(gè)號碼,就可以進(jìn)行通話(huà)了。計算機網(wǎng)絡(luò )也差不多,在計算機網(wǎng)絡(luò )中,每個(gè)計算機上的每個(gè)網(wǎng)卡,都會(huì )有一個(gè)號碼相互識別,這個(gè)號碼在不同的場(chǎng)景下,會(huì )有不同的表現,比如,網(wǎng)址:知乎 - 與世界分享你的知識、經(jīng)驗和見(jiàn)解,再比如IP地址,再比如mac地址。后面我們會(huì )一點(diǎn)點(diǎn)講解這些地址分別在什么場(chǎng)景下使用的?,F在我們只需要知道一個(gè)服務(wù)端是要有一個(gè)地址的。而在我們的今天的場(chǎng)景下,這個(gè)地址(可以類(lèi)比手機號碼)就是IP地址。不多說(shuō)了,先上代碼,跑起來(lái),大家就明白了。public class Server { public static void main(String args[]) throws { ss = new (8080); Socket conn = ss.accept(); br = new (new (conn.())); bw = new (new (conn.())); String s = br.readLine(); while (s != null) { System.out.println(s); bw.write(s.() + "\n"); bw.flush(); s = br.readLine(); } br.close(); bw.close(); conn.close(); } } 可以看到服務(wù)端在8080端口上開(kāi)啟了一個(gè),等待連接。大家可以單步調試一下,看看當調用到accept的時(shí)候會(huì )發(fā)生什么情況。然后就是創(chuàng )建一個(gè)Reader用于從網(wǎng)絡(luò )上讀數據,一個(gè)Writer向網(wǎng)絡(luò )上寫(xiě)數據。讀進(jìn)來(lái)的一行,把它轉成大寫(xiě),再發(fā)回到客戶(hù)端??蛻?hù)端也把代碼放上來(lái)public class Client { public static void main(String args[]) throws { Socket conn = new Socket("127.0.0.1", 8080); br = new (new (conn.())); bw = new (new (conn.())); bw.write("hello\n"); bw.flush(); String s = br.readLine(); System.out.println(s); bw.write("world\n"); bw.flush(); s = br.readLine(); System.out.println(s); br.close(); bw.close(); conn.close(); } } 和服務(wù)端對應的,客戶(hù)端創(chuàng )建一個(gè)Socket,這個(gè) Socket 在構造的時(shí)候就發(fā)起向服務(wù)端的連接。連接了以后,也創(chuàng )建一個(gè) Reader,一個(gè) Writer。接著(zhù)向服務(wù)端發(fā)送了兩個(gè)小寫(xiě)字符串。先運行服務(wù)端,再運行客戶(hù)端,我們可以看到這樣的結果:?jiǎn)?wèn)題今天就先稍微體驗一下吧。這里涉及到socket,ip 地址, 端口號(程序中是8080)這些到底有什么關(guān)系?在Java虛擬機里到底是如何實(shí)現的?這些問(wèn)題,我們會(huì )在接下來(lái)的課程里慢慢解釋。今天的作業(yè),從控制臺上輸入一個(gè)字符串,然后發(fā)送到服務(wù)端。上一節課:數據結構(七):二叉樹(shù)的刪除和應用舉例下一節課:分層網(wǎng)絡(luò )協(xié)議目錄:課程目錄
上述文章了解到關(guān)于Java網(wǎng)絡(luò )編程(一):初體驗?? ,讓我們對java中的網(wǎng)絡(luò )編程 有一個(gè)直觀(guān)的認知。我們發(fā)現,作為一個(gè)優(yōu)秀的Java程序員是多么的自豪。