java網(wǎng)絡(luò)編程深入研究_第1頁(yè)
java網(wǎng)絡(luò)編程深入研究_第2頁(yè)
java網(wǎng)絡(luò)編程深入研究_第3頁(yè)
java網(wǎng)絡(luò)編程深入研究_第4頁(yè)
java網(wǎng)絡(luò)編程深入研究_第5頁(yè)
已閱讀5頁(yè),還剩11頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、網(wǎng)絡(luò)編程三要素:A:IP地址B:端口C:協(xié)議舉例:我想和林青霞說(shuō)話(huà)了。腫么辦?A:我要找到林青霞。B:對(duì)她說(shuō)話(huà),要對(duì)耳朵說(shuō)。C:我說(shuō)什么呢?"I Love You" 但是,她沒(méi)學(xué)過(guò)英語(yǔ),聽(tīng)不懂。 我沒(méi)必要說(shuō)英語(yǔ),說(shuō)漢語(yǔ)就可以了:我愛(ài)你 IP地址:網(wǎng)絡(luò)中計(jì)算機(jī)的唯一標(biāo)識(shí)。計(jì)算機(jī)只能識(shí)別二進(jìn)制的數(shù)據(jù),所以我們的IP地址應(yīng)該是一個(gè)二進(jìn)制的數(shù)據(jù)。但是呢,我們配置的IP地址確不是二進(jìn)制的,為什么呢?IP:換算:11000000 10101000 00000001 01100100假如真是:11000000 10101000 00000001 01100100的話(huà)。我們?nèi)绻看卧偕险n的

2、時(shí)候要配置該IP地址,記憶起來(lái)就比較的麻煩。所以,為了方便表示IP地址,我們就把IP地址的每一個(gè)字節(jié)上的數(shù)據(jù)換算成十進(jìn)制,然后用.分開(kāi)來(lái)表示:"點(diǎn)分十進(jìn)制"IP地址的組成:網(wǎng)絡(luò)號(hào)段+主機(jī)號(hào)段A類(lèi):第一號(hào)段為網(wǎng)絡(luò)號(hào)段+后三段的主機(jī)號(hào)段一個(gè)網(wǎng)絡(luò)號(hào):256*256*256 = 16777216B類(lèi):前二號(hào)段為網(wǎng)絡(luò)號(hào)段+后二段的主機(jī)號(hào)段一個(gè)網(wǎng)絡(luò)號(hào):256*256 = 65536C類(lèi):前三號(hào)段為網(wǎng)絡(luò)號(hào)段+后一段的主機(jī)號(hào)段一個(gè)網(wǎng)絡(luò)號(hào):256IP地址的分類(lèi):A類(lèi)是私有地址(私有地址就是在互聯(lián)網(wǎng)上不使用,而被用在局域網(wǎng)絡(luò)中的地址)是保留地址,用做循環(huán)測(cè)試用的。B類(lèi)是私有地址。是保留地址。C

3、類(lèi)是私有地址D類(lèi)224.0.0.1-239.255.255.254 E類(lèi)兩個(gè)DOS命令:ipconfig 查看本機(jī)ip地址ping 后面跟ip地址。測(cè)試本機(jī)與指定的ip地址間的通信是否有問(wèn)題特殊的IP地址:127.0.0.1 回環(huán)地址(表示本機(jī))x.x.x.255 廣播地址x.x.x.0 網(wǎng)絡(luò)地址端口號(hào):正在運(yùn)行的程序的標(biāo)識(shí)。有效端口:065535,其中01024系統(tǒng)使用或保留端口。協(xié)議:通信的規(guī)則UDP:把數(shù)據(jù)打包數(shù)據(jù)有限制不建立連接速度快不可靠TCP:建立連接通道數(shù)據(jù)無(wú)限制速度慢可靠舉例:UDP:發(fā)短信TCP:打電話(huà)1:網(wǎng)絡(luò)編程(理解)(1)網(wǎng)絡(luò)編程:用Java語(yǔ)言實(shí)現(xiàn)計(jì)算機(jī)間數(shù)據(jù)的信息傳

4、遞和資源共享(2)網(wǎng)絡(luò)編程模型(3)網(wǎng)絡(luò)編程的三要素A:IP地址a:點(diǎn)分十進(jìn)制b:IP地址的組成c:IP地址的分類(lèi)d:dos命令e:InetAddressB:端口是應(yīng)用程序的標(biāo)識(shí)。范圍:0-65535。其中0-1024不建議使用。C:協(xié)議UDP:數(shù)據(jù)打包,有限制,不連接,效率高,不可靠TCP:建立數(shù)據(jù)通道,無(wú)限制,效率低,可靠(3)Socket機(jī)制A:通信兩端都應(yīng)該有Socket對(duì)象B:所有的通信都是通過(guò)Socket間的IO進(jìn)行操作的(4)UDP協(xié)議發(fā)送和接收數(shù)據(jù)(掌握 自己補(bǔ)齊代碼)發(fā)送:創(chuàng)建UDP發(fā)送端的Socket對(duì)象創(chuàng)建數(shù)據(jù)并把數(shù)據(jù)打包發(fā)送數(shù)據(jù)釋放資源接收:創(chuàng)建UDP接收端的Socke

5、t對(duì)象創(chuàng)建數(shù)據(jù)包用于接收數(shù)據(jù)接收數(shù)據(jù)解析數(shù)據(jù)包釋放資源(5)TCP協(xié)議發(fā)送和接收數(shù)據(jù)(掌握 自己補(bǔ)齊代碼)發(fā)送:創(chuàng)建TCP客戶(hù)端的Socket對(duì)象獲取輸出流,寫(xiě)數(shù)據(jù)釋放資源接收:創(chuàng)建TCP服務(wù)器端的Socket對(duì)象監(jiān)聽(tīng)客戶(hù)端連接獲取輸入流,讀取數(shù)據(jù)釋放資源(6)案例:A:UDPa:最基本的UDP協(xié)議發(fā)送和接收數(shù)據(jù)b:把發(fā)送數(shù)據(jù)改進(jìn)為鍵盤(pán)錄入c:一個(gè)簡(jiǎn)易聊天小程序并用多線(xiàn)程改進(jìn)B:TCPa:最基本的TCP協(xié)議發(fā)送和接收數(shù)據(jù)b:服務(wù)器給出反饋c:客戶(hù)端鍵盤(pán)錄入服務(wù)器控制臺(tái)輸出d:客戶(hù)端鍵盤(pán)錄入服務(wù)器寫(xiě)到文本文件e:客戶(hù)端讀取文本文件服務(wù)器控制臺(tái)輸出f:客戶(hù)端讀取文本文件服務(wù)器寫(xiě)到文本文件g:上傳圖

6、片h:多線(xiàn)程改進(jìn)上傳文件Scoket通信原理TCP協(xié)議發(fā)送和接受數(shù)據(jù)UDP協(xié)議發(fā)送和接收數(shù)據(jù)網(wǎng)絡(luò)模型圖解1 多次啟動(dòng)接收端import ;import ;import ;/* * 多次啟動(dòng)接收端: * : Address already in use: Cannot bind * 端口被占用。 */public class ReceiveDemo public static void main(String args) throws IOException / 創(chuàng)建接收端的Socket對(duì)象DatagramSocket ds = new DatagramSocket(12345);while (

7、true) / 創(chuàng)建一個(gè)包裹byte bys = new byte1024;DatagramPacket dp = new DatagramPacket(bys, bys.length);/ 接收數(shù)據(jù)ds.receive(dp);/ 解析數(shù)據(jù)String ip = dp.getAddress().getHostAddress();String s = new String(dp.getData(), 0, dp.getLength();("from " + ip + " data is : " + s);/ 釋放資源/ 接收端應(yīng)該一直開(kāi)著等待接收數(shù)據(jù),是

8、不需要關(guān)閉/ ds.close();2 數(shù)據(jù)來(lái)自鍵盤(pán)錄入import ;import ;import ;import ;import ;import ;/* * 數(shù)據(jù)來(lái)自于鍵盤(pán)錄入 * 鍵盤(pán)錄入數(shù)據(jù)要自己控制錄入結(jié)束。 */public class SendDemo public static void main(String args) throws IOException / 創(chuàng)建發(fā)送端的Socket對(duì)象DatagramSocket ds = new DatagramSocket();/ 封裝鍵盤(pán)錄入數(shù)據(jù)BufferedReader br = new BufferedReader(new

9、InputStreamReader(System.in);String line = null;while (line = br.readLine() != null) if ("886".equals(line) break;/ 創(chuàng)建數(shù)據(jù)并打包byte bys = line.getBytes();/ DatagramPacket dp = new DatagramPacket(bys, bys.length,/ InetAddress.getByName("192.168.12.92"), 12345);DatagramPacket dp = new

10、DatagramPacket(bys, bys.length,InetAddress.getByName("192.168.12.255"), 12345);/ 發(fā)送數(shù)據(jù)ds.send(dp);/ 釋放資源ds.close(); 3 單設(shè)計(jì)模式package cn.itcast_01;import ;import ;over/* * 如果一個(gè)類(lèi)沒(méi)有構(gòu)造方法: * A:成員全部是靜態(tài)的(Math,Arrays,Collections) * B:單例設(shè)計(jì)模式(Runtime) * C:類(lèi)中有靜態(tài)方法返回該類(lèi)的對(duì)象(InetAddress) * class Demo * priv

11、ate Demo() * * public static Demo getXxx() * return new Demo(); * * * * 看InetAddress的成員方法: * public static InetAddress getByName(String host):根據(jù)主機(jī)名或者IP地址的字符串表示得到IP地址對(duì)象 */public class InetAddressDemo public static void main(String args) throws UnknownHostException / public static InetAddress getByNam

12、e(String host)/ InetAddress address = InetAddress.getByName("liuyi");/ InetAddress address = InetAddress.getByName("192.168.12.92");InetAddress address = InetAddress.getByName("192.168.12.63");/ 獲取兩個(gè)東西:主機(jī)名,IP地址/ public String getHostName()String name = address.getHostNa

13、me();/ public String getHostAddress()String ip = address.getHostAddress();(name + "-" + ip);4 UDP協(xié)議接受數(shù)據(jù)package cn.itcast_02;import ;import ;import ;import ;/* * UDP協(xié)議接收數(shù)據(jù): * A:創(chuàng)建接收端Socket對(duì)象 * B:創(chuàng)建一個(gè)數(shù)據(jù)包(接收容器) * C:調(diào)用Socket對(duì)象的接收方法接收數(shù)據(jù) * D:解析數(shù)據(jù)包,并顯示在控制臺(tái) * E:釋放資源 */public class ReceiveDemo publ

14、ic static void main(String args) throws IOException / 創(chuàng)建接收端Socket對(duì)象/ DatagramSocket(int port)DatagramSocket ds = new DatagramSocket(10086);/ 創(chuàng)建一個(gè)數(shù)據(jù)包(接收容器)/ DatagramPacket(byte buf, int length)byte bys = new byte1024;int length = bys.length;DatagramPacket dp = new DatagramPacket(bys, length);/ 調(diào)用Sock

15、et對(duì)象的接收方法接收數(shù)據(jù)/ public void receive(DatagramPacket p)ds.receive(dp); / 阻塞式/ 解析數(shù)據(jù)包,并顯示在控制臺(tái)/ 獲取對(duì)方的ip/ public InetAddress getAddress()InetAddress address = dp.getAddress();String ip = address.getHostAddress();/ public byte getData():獲取數(shù)據(jù)緩沖區(qū)/ public int getLength():獲取數(shù)據(jù)的實(shí)際長(zhǎng)度byte bys2 = dp.getData();int l

16、en = dp.getLength();String s = new String(bys2, 0, len);(ip + "傳遞的數(shù)據(jù)是:" + s);/ 釋放資源ds.close();5 InetAddress的成員方法package cn.itcast_01;import ;import ;over/* * 如果一個(gè)類(lèi)沒(méi)有構(gòu)造方法: * A:成員全部是靜態(tài)的(Math,Arrays,Collections) * B:單例設(shè)計(jì)模式(Runtime) * C:類(lèi)中有靜態(tài)方法返回該類(lèi)的對(duì)象(InetAddress) * class Demo * private Demo()

17、 * * public static Demo getXxx() * return new Demo(); * * * * 看InetAddress的成員方法: * public static InetAddress getByName(String host):根據(jù)主機(jī)名或者IP地址的字符串表示得到IP地址對(duì)象 */public class InetAddressDemo public static void main(String args) throws UnknownHostException / public static InetAddress getByName(String h

18、ost)/ InetAddress address = InetAddress.getByName("liuyi");/ InetAddress address = InetAddress.getByName("192.168.12.92");InetAddress address = InetAddress.getByName("192.168.12.63");/ 獲取兩個(gè)東西:主機(jī)名,IP地址/ public String getHostName()String name = address.getHostName();/ pub

19、lic String getHostAddress()String ip = address.getHostAddress();(name + "-" + ip);6 UDP協(xié)議接受數(shù)據(jù)package cn.itcast_02;import ;import ;import ;import ;/* * UDP協(xié)議接收數(shù)據(jù): * A:創(chuàng)建接收端Socket對(duì)象 * B:創(chuàng)建一個(gè)數(shù)據(jù)包(接收容器) * C:調(diào)用Socket對(duì)象的接收方法接收數(shù)據(jù) * D:解析數(shù)據(jù)包,并顯示在控制臺(tái) * E:釋放資源 */public class ReceiveDemo public static void main(String args) throws IOException / 創(chuàng)建接收端Socket

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 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ì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論