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

下載本文檔

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

文檔簡介

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

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

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

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

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

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

7、true) / 創(chuàng)建一個包裹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)該一直開著等待接收數(shù)據(jù),是

8、不需要關(guān)閉/ ds.close();2 數(shù)據(jù)來自鍵盤錄入import ;import ;import ;import ;import ;import ;/* * 數(shù)據(jù)來自于鍵盤錄入 * 鍵盤錄入數(shù)據(jù)要自己控制錄入結(jié)束。 */public class SendDemo public static void main(String args) throws IOException / 創(chuàng)建發(fā)送端的Socket對象DatagramSocket ds = new DatagramSocket();/ 封裝鍵盤錄入數(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è)計模式package cn.itcast_01;import ;import ;over/* * 如果一個類沒有構(gòu)造方法: * A:成員全部是靜態(tài)的(Math,Arrays,Collections) * B:單例設(shè)計模式(Runtime) * C:類中有靜態(tài)方法返回該類的對象(InetAddress) * class Demo * priv

11、ate Demo() * * public static Demo getXxx() * return new Demo(); * * * * 看InetAddress的成員方法: * public static InetAddress getByName(String host):根據(jù)主機名或者IP地址的字符串表示得到IP地址對象 */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");/ 獲取兩個東西:主機名,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對象 * B:創(chuàng)建一個數(shù)據(jù)包(接收容器) * C:調(diào)用Socket對象的接收方法接收數(shù)據(jù) * D:解析數(shù)據(jù)包,并顯示在控制臺 * E:釋放資源 */public class ReceiveDemo publ

14、ic static void main(String args) throws IOException / 創(chuàng)建接收端Socket對象/ DatagramSocket(int port)DatagramSocket ds = new DatagramSocket(10086);/ 創(chuàng)建一個數(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對象的接收方法接收數(shù)據(jù)/ public void receive(DatagramPacket p)ds.receive(dp); / 阻塞式/ 解析數(shù)據(jù)包,并顯示在控制臺/ 獲取對方的ip/ public InetAddress getAddress()InetAddress address = dp.getAddress();String ip = address.getHostAddress();/ public byte getData():獲取數(shù)據(jù)緩沖區(qū)/ public int getLength():獲取數(shù)據(jù)的實際長度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òu)造方法: * A:成員全部是靜態(tài)的(Math,Arrays,Collections) * B:單例設(shè)計模式(Runtime) * C:類中有靜態(tài)方法返回該類的對象(InetAddress) * class Demo * private Demo()

17、 * * public static Demo getXxx() * return new Demo(); * * * * 看InetAddress的成員方法: * public static InetAddress getByName(String host):根據(jù)主機名或者IP地址的字符串表示得到IP地址對象 */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");/ 獲取兩個東西:主機名,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對象 * B:創(chuàng)建一個數(shù)據(jù)包(接收容器) * C:調(diào)用Socket對象的接收方法接收數(shù)據(jù) * D:解析數(shù)據(jù)包,并顯示在控制臺 * E:釋放資源 */public class ReceiveDemo public static void main(String args) throws IOException / 創(chuàng)建接收端Socket

溫馨提示

  • 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)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論