1.網絡編程是什么 了解?? ??? ??? ??? ??? ??? ??? ?
?? ?
?? ??? ?在Java語言中,我們可以使用java.net包下的技術輕松開發出常見的網絡應用程序,從而把分布在不同地理區域的計算機與專門的外部設備用通信線路互連成一個規模大、功能強的網絡系統,
?? ??? ?從而使眾多的計算機可以方便地互相傳遞信息、共享硬件、軟件、數據信息等資源。
?? ??? ?
?? ??? ?想要實現網絡互聯的不同計算機上運行的程序間可以進行數據交換,那么就要涉及到網絡編程的“三要素”,這樣就能解決以下的三個問題:
?? ??? ?1. 如何準確地定位網絡上一臺或多臺主機IP地址
?? ??? ?2. 如何定位到主機上某個特定的應用端口號
?? ??? ?3. 找到主機后如何可靠高效地進行數據傳輸通訊協議
?? ?2.網絡編程三要素 理解
?? ??? ?2.1 IP地址
?? ??? ?要想讓網絡中的計算機能夠互相通信,必須為每臺計算機指定一個標識號,通過這個標識號來指定要接收數據的計算機和識別發送的計算機,而IP地址就是這個標識號。
?? ??? ?也就是設備的標識,簡單說就是設備在網絡中的地址,是唯一的標識。
?? ??? ?
?? ??? ?目前,IP地址廣泛使用的版本是IPv4,它是由4個字節大小的二進制數來表示,例如:0000-1010 0000-0000 0000-0000 0000-0001。
?? ??? ?由于二進制形式表示的IP地址非常不便記憶和處理,因此通常會將IP地址寫成十進制的形式,每個字節(8位)用一個十進制整數來(0-255)表示,數字間用符號“.”分開,如“192.168.0.1”。
?? ??? ?因為8位對應的十進制無符號整數為:0-255,所以-4.278.4.1是錯誤的IPv4地址。
?? ??? ?
?? ??? ?隨著計算機網絡規模的不斷擴大,對IP地址的需求也越來越多,IPv4這種用4個字節表示的IP地址面臨枯竭,因此IPv6便應運而生了,IPv6使用16個字節表示IP地址,它所擁有的地址容量達到2128 個(算上全零的),這樣就解決了網絡地址資源數量不夠的問題。16個字節寫成8個16位的無符號整數,每個整數用四個十六進制位表示,每個數之間用冒號分開,如:3ffe:3201:1401:1280:c8ff:fe4d:db39:1984。
?? ??? ?注意事項:
?? ??? ?1. 本機地址:127.0.0.1,主機名:localhost。
?? ??? ?2. 192.168.0.0--192.168.255.255為私有地址,屬于非注冊地址,專門為組織機構內部使用。
?? ??? ??? ?2.1.1 域名和DNS
?? ??? ??? ??? ?2.1.1.1 域名
?? ??? ??? ??? ??? ?IP地址畢竟是數字標識,使用時不好記憶和書寫,因此在IP地址的基礎上又發展出一種符號化的地址方案,來代替數字型的IP地址。
?? ??? ??? ??? ??? ?每一個符號化的地址都與特定的IP地址對應。這個與網絡上的數字型IP地址相對應的字符型地址,就被稱為域名。
?? ??? ??? ??? ??? ?目前域名已經成為互聯網品牌、網上商標保護必備的要素之一,除了識別功能外,還有引導、宣傳等作用。如:www.baidu.com。
?? ??? ??? ??? ?2.1.1.2 DNS
?? ??? ??? ??? ??? ?在Internet上域名與IP地址之間是一對一(或者多對一)的,域名雖然便于人們記憶,但機器之間只能互相認識IP地址,它們之間的轉換工作稱為域名解析,
?? ??? ??? ??? ??? ?域名解析需要由專門的域名解析服務器來完成,DNS(Domain Name System域名系統)就是進行域名解析的服務器,域名的最終指向是IP。
?? ??? ?2.2 端口號
?? ??? ??? ?IP地址用來標識一臺計算機,但是一臺計算機上可能提供多種網絡應用程序,如何來區分這些不同的程序呢這就要用到端口。
?? ??? ??? ?在計算機中,不同的應用程序是通過端口號區分的。端口號是用兩個字節(無符號)表示的,它的取值范圍是0~65535,而這些計算機端口可分為3大類:
?? ??? ??? ?公認端口:0~1023。被預先定義的服務通信占用(如:HTTP占用端口80,FTP占用端口21,Telnet占用端口23等)
?? ??? ??? ?注冊端口:1024~49151。分配給用戶進程或應用程序。(如:Tomcat占用端口8080,MySQL占用端口3306,Oracle占用端口1521等)。
?? ??? ??? ?動態/私有端口:49152~65535。
?? ??? ??? ?IP地址好比每個人的地址(門牌號),端口好比是房間號。必須同時指定IP地址和端口號才能夠正確的發送數據。接下來通過一個圖例來描述IP地址和端口號的作用,如下圖所示
?? ??? ?2.3 通訊協議
?? ??? ??? ?通過計算機網絡可以使多臺計算機實現連接,位于同一個網絡中的計算機在進行連接和通信時需要遵守一定的規則。
?? ??? ??? ?就像兩個人想要順利溝通就必須使用同一種語言一樣,如果一個人只懂英語而另外一個人只懂中文,這樣就會造成沒有共同語言而無法溝通。
?? ??? ??? ?在計算機網絡中,這些連接和通信的規則被稱為網絡通信協議,它對數據的傳輸格式、傳輸速率、傳輸步驟等做了統一規定,通信雙方必須同時遵守才能完成數據交換。
?? ??? ??? ?2.3.1 OSI參考模型
?? ??? ??? ??? ?世界上第一個網絡體系結構由IBM公司提出(1974年,SNA),以后其他公司也相繼提出自己的網絡體系結構如:Digital公司的DNA,美國國防部的TCP/IP等,
?? ??? ??? ??? ?多種網絡體系結構并存,其結果是若采用IBM的結構,只能選用IBM的產品,只能與同種結構的網絡互聯。
?? ??? ??? ??? ?
?? ??? ??? ??? ?為了促進計算機網絡的發展,國際標準化組織ISO(International Organization for Standardization)于1977年成立了一個委員會,
?? ??? ??? ??? ?在現有網絡的基礎上,提出了不基于具體機型、操作系統或公司的網絡體系結構,
?? ??? ??? ??? ?稱為開放系統互連參考模型,即OSI/RM (Open System Interconnection Reference Model)。
?? ??? ??? ??? ?OSI模型把網絡通信的工作分為7層,分別是物理層、數據鏈路層、網絡層、傳輸層、會話層、表示層和應用層。OSI七層協議模型中約定了不同主機之間每層的數據傳輸協議。
?? ??? ??? ?2.3.2 TCP/IP參考模型
?? ??? ??? ??? ?OSI參考模型的初衷是提供全世界范圍的計算機網絡都要遵循的統一標準,但是由于存在模型和協議自身的缺陷,遲遲沒有成熟的產品推出。
?? ??? ??? ??? ?TCP/IP協議在實踐中不斷完善和發展取得成功,作為網絡的基礎,Internet的語言,可以說沒有TCP/IP協議就沒有互聯網的今天。
?? ??? ??? ??? ?TCP/IP,即Transmission Control Protocol/Internet Protocol的簡寫,中譯名為傳輸控制協議/因特網互聯協議,是Internet最基本的協議、Internet國際互聯網絡的基礎。
?? ??? ??? ??? ?
?? ??? ??? ??? ?TCP/IP協議是一個開放的網絡協議簇,它的名字主要取自最重要的網絡層IP協議和傳輸層TCP協議。TCP/IP協議定義了電子設備如何連入因特網,以及數據如何在它們之間傳輸的標準。
?? ??? ??? ??? ?TCP/IP參考模型采用4層的層級結構,每一層都呼叫它的下一層所提供的協議來完成自己的需求,這4個層次分別是:網絡接口層、互聯網層(IP層)、傳輸層(TCP層)、應用層。
?? ??? ??? ??? ?OSI模型與TCP/IP模型的對應關系如圖所示:
?? ??? ??? ??? ??? ?OSI模型中的應用層、表示層、會話層對應TCP/IP協議的應用層
?? ??? ??? ??? ??? ?OSI模型中的傳輸層對應TCP/IP協議的傳輸層(TCP/UDP)
?? ??? ??? ??? ??? ?OSI模型中的網絡層對應TCP/IP協議的網絡層(IP)
?? ??? ??? ??? ??? ?OSI模型中的數據鏈路層、物理層對應TCP/IP協議的物理+數據鏈路層
?? ??? ??? ??? ?
?? ??? ??? ??? ?那么TCP/IP協議和OSI模型有什么區別呢?
?? ??? ??? ??? ?OSI網絡通信協議模型,是一個參考模型,而TCP/IP協議是事實上的標準。TCP/IP協議參考了OSI 模型,但是并沒有嚴格按照OSI規定的七層標準去劃分,
?? ??? ??? ??? ?而只劃分了四層,這樣會更簡單點,當劃分太多層次時,你很難區分某個協議是屬于哪個層次的。
?? ??? ??? ??? ?
?? ??? ??? ??? ?TCP/IP協議和OSI模型也并不沖突,TCP/IP協議中的應用層協議,就對應于OSI中的應用層,表示層,會話層。
?? ??? ??? ??? ?TCP/IP中有兩個重要的協議,傳輸層的TCP協議和互連網絡層的IP協議,因此就拿這兩個協議做代表,來命名整個協議族了,再說TCP/IP協議時,是指整個協議族。
?? ?3.網絡編程基礎類 掌握
?? ??? ?3.1 InetAddress類
?? ??? ?java.net.InetAddress用來封裝計算機的ip地址及DNS(沒有端口信息),包括一個主機名和一個URL地址,是java對ip地址的高層展示。
?? ??? ?大多數類都用到這個類,包括Socket、ServerSocket、URL、DatagramSocket、DatagramPocket
?? ?
?? ??? ??? ?3.1.1 常用靜態方法?
?? ??? ??? ??? ?InetAddress getByName(String host); --傳入主機名或ip地址得到對應的InetAddress對象,其中封裝了ip地址和主機名
?? ??? ??? ??? ?InetAddress getLocalHost(); --獲取本機的InetAddress對象,其中封裝ip地址和主機名
?? ??? ??? ?3.1.2 常用成員方法
?? ??? ??? ??? ?String getHostAddress(); --獲取ip地址
?? ??? ??? ??? ?String getHostName(); --獲取主機名
?? ??? ?3.2 URL類
?? ??? ?java.net.URL是統一資源定位符,對可以從互聯網上得到的資源的位置和訪問方法的一種簡潔的表示,是互聯網上標準資源的地址。
?? ??? ?互聯網上的每個文件都有一個唯一的URL,它包含的信息指出文件的位置以及瀏覽器應該怎么處理它。
?? ??? ?URL由4部分組成:協議、存放資源的主機域名、資源文件名和端口號。如果未指定該端口號,則使用協議默認的端口。
?? ??? ?例如HTTP協議的默認端口為80。在瀏覽器中訪問網頁時,地址欄顯示的地址就是URL。
?? ??? ?URL標準格式為:<協議>://<域名或IP>:<端口>/<路徑>。其中,<協議>://<域名或IP>是必需的,<端口>/<路徑>有時可省略。如:https://www.baidu.com。
?? ??? ?為了方便程序員編程,JDK中提供了URL類,該類的全名是java.net.URL,該類封裝了大量復雜的涉及從遠程站點獲取信息的細節,可以使用它的各種方法來對URL對象進行分割、合并等處理。
?? ??? ?
?? ??? ?創建方式:new URL(String path);
?? ??? ?獲取協議方法:getProtlcol();
?? ??? ?獲取域名:getHost();
?? ??? ?獲取與URL關聯協議的默認端口:getDefaultPort();
?? ??? ?獲取端口:getPort();
?? ??? ?獲取端口號后,參數前的內容:getPath();
?? ??? ?獲取端口號后所有的內容:getFile();
?? ??? ?獲取參數:getQuery();
?? ??? ?獲取錨點:getRef(); --輸出"#"后面的內容
?? ??? ?
?? ??? ?使用此類的InputStream openStream()方法,可打開此URL的一個鏈接,并返回一個用于從該連接讀入的InputStream,實現簡單的網絡讀取。
?? ?
?? ?4.TCP和UDP協議 ? 理解
?? ??? ?4.1 Socket套接字概述
?? ??? ??? ?我們開發的網絡應用程序位于應用層,TCP和UDP屬于傳輸層協議,在應用層如何使用傳輸層的服務呢在應用層和傳輸層之間,則是使用套接Socket來進行分離。
?? ??? ??? ?
?? ??? ??? ?套接字就像是傳輸層為應用層開的一個小口,應用程序通過這個小口向遠程發送數據,或者接收遠程發來的數據。
?? ??? ??? ?而這個小口以內,也就是數據進入這個口之后,或者數據從這個口出來之前,是不知道也不需要知道的,也不會關心它如何傳輸,這屬于網絡其它層次工作。
?? ??? ??? ?
?? ??? ??? ?Socket實際是傳輸層供給應用層的編程接口。Socket就是應用層與傳輸層之間的橋梁。
?? ??? ??? ?使用Socket編程可以開發客戶機和服務器應用程序,可以在本地網絡上進行通信,也可通過Internet在全球范圍內通信。
?? ??? ??? ?
?? ??? ??? ?應用層-(Socket)-傳輸層-網絡層-數據鏈路層-物理層
?? ??? ?4.2 TCP協議和UDP協議
?? ??? ??? ?TCP協議和UDP協議是傳輸層的兩種協議。Socket是傳輸層供給應用層的編程接口,所以Socket編程就分為TCP編程和UDP編程兩類
?? ??? ??? ?4.2.1 TCP協議
?? ??? ??? ??? ?使用TCP協議,須先建立TCP連接,形成傳輸數據通道,似于撥打電話
?? ??? ??? ??? ?傳輸前,采用“三次握手”方式,屬于點對點通信,是面向連接的,效率低。
?? ??? ??? ??? ?僅支持單播傳輸,每條TCP傳輸連接只能有兩個端點(客戶端、服務端)。
?? ??? ??? ??? ?兩個端點的數據傳輸,采用的是“字節流”來傳輸,屬于可靠的數據傳輸。
?? ??? ??? ??? ?傳輸完畢,需釋放已建立的連接,開銷大,速度慢,適用于文件傳輸、郵件等。
?? ??? ??? ?4.2.2 UDP協議
?? ??? ??? ??? ?采用數據報(數據、源、目的)的方式來傳輸,無需建立連接,類似于發短信。
?? ??? ??? ??? ?每個數據報的大小限制在64K內,超出64k可以分為多個數據報來發送。
?? ??? ??? ??? ?發送不管對方是否準備好,接收方即使收到也不確認,因此屬于不可靠的。
?? ??? ??? ??? ?可以廣播發送,也就是屬于一對一、一對多和多對一連接的通信協議。
?? ??? ??? ??? ?發送數據結束時無需釋放資源,開銷小,速度快,適用于視頻會議、直播等。
?? ??? ??? ?4.2.3 TCP協議和UDP協議的區別
?? ??? ??? ??? ?是否連接:TCP面向連接,UDP面向非連接
?? ??? ??? ??? ?傳遞可靠性:TCP可靠,UDP不可靠
?? ??? ??? ??? ?連接對象個數:TCP(一對一),UCP(一對一,一對多,多對一)
?? ??? ??? ??? ?傳輸方式:TCP面向字節流,UDP面向報文
?? ??? ??? ??? ?傳輸速度:TCP慢,UDP快
?? ??? ??? ??? ?應用場景:TCP適用于可靠傳輸(文件傳輸,郵件等);UDP適用于實時應用(視頻會議,直播等)
?? ??? ?4.3 三次握手和四次回收
?? ??? ??? ?客戶端與服務端在使用TCP傳輸協議時要先建立一個“通道”,在傳輸完畢之后又要關閉這“通道”,前者可以被形象地成為“三次握手”,而后者則可以被稱為“四次揮手”。
?? ??? ??? ?通道的建立之三次握手:
?? ??? ??? ?1. 在建立通道時,客戶端首先要向服務端發送一個SYN同步信號。
?? ??? ??? ?2. 服務端在接收到這個信號之后會向客戶端發出SYN同步信號和ACK確認信號。
?? ??? ??? ?3. 當服務端的ACK和SYN到達客戶端后,客戶端與服務端之間的這個“通道”就被建立。
?? ??? ??? ?
?? ??? ??? ?通道的關閉之四次揮手:
?? ??? ??? ?1. 在數據傳輸完畢之后,客戶端會向服務端發出一個FIN終止信號。
?? ??? ??? ?2. 服務端在收到這個信號之后會向客戶端發出一個ACK確認信號。
?? ??? ??? ?3. 如果服務端此后也沒有數據發給客戶端時服務端會向客戶端發送一個FIN終止信號。
?? ??? ??? ?4. 客戶端在收到這個信號之后會回復一個確認信號,在服務端接收到這個信號之后,服務端與客戶端的通道也就關閉了。
?? ??? ??? ?
?? ?5.基于TCP協議的編程 掌握
?? ??? ?5.1 TCP協議編程概述
?? ??? ??? ?套接字是一種進程間的數據交換機制,利用套接字(Socket)開發網絡應用程序早已被廣泛的采用,以至于成為事實上的標準。
?? ??? ??? ?在網絡通訊中,第一次主動發起通訊的程序被稱作客戶端(Client),而在第一次通訊中等待連接的程序被稱作服務端(Server)。
?? ??? ??? ?一旦通訊建立,則客戶端和服務器端完全一樣,沒有本質的區別。
?? ??? ??? ?套接字與主機地址和端口號相關聯,主機地址就是客戶端或服務器程序所在的主機的IP地址,端口地址是指客戶端或服務器程序使用的主機的通信端口。
?? ??? ??? ?在客戶端和服務器中,分別創建獨立的Socket,并通過Socket的屬性,將兩個Socket進行連接,這樣客戶端和服務器通過套接字所建立連接并使用IO流進行通信。
?? ??? ?5.2 Socket的概述
?? ??? ??? ?Socket類實現客戶端套接字(Client客戶端),套接字是兩臺機器之間通信的端點
?? ??? ??? ?Socket構造方法:public Socket(InetAddress ia,int p); 創建套接字并連接到指定ip地址的指定端口
?? ??? ??? ?
?? ??? ??? ?Socket成員方法:
?? ??? ??? ??? ?方法名?? ??? ??? ??? ??? ??? ??? ??? ??? ?描述
?? ??? ??? ??? ?public InetAddress getInetAddress()?? ??? ?返回此套接字連接到的遠程 IP 地址。
?? ??? ??? ??? ?public InputStream getInputStream()?? ??? ?返回此套接字的輸入流(接收網絡消息)。
?? ??? ??? ??? ?public OutputStream getOutputStream()?? ?返回此套接字的輸出流(發送網絡消息)。
?? ??? ??? ??? ?public void shutdownInput()?? ??? ??? ??? ?禁用此套接字的輸入流
?? ??? ??? ??? ?public void shutdownOutput()?? ??? ??? ?禁用此套接字的輸出流。
?? ??? ??? ??? ?public synchronized void close()?? ??? ?關閉此套接字(默認會關閉IO流)。
?? ??? ?5.3?? ?ServerSocket的概述
?? ??? ??? ?ServerSocket類用于實現服務器套接字(Server服務端)。服務器套接字等待請求通過網絡傳入。它基于該請求執行某些操作,然后可能向請求者返回結果。
?? ??? ??? ?
?? ??? ??? ?ServerSocket類的構造方法:
?? ??? ??? ?方法名?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?描述
?? ??? ??? ?public ServerSocket(int port)?? ??? ??? ?創建服務器套接字并綁定端口號
?? ??? ??? ?
?? ??? ??? ?ServerSocket類的常用方法:
?? ??? ??? ?方法名?? ??? ??? ??? ??? ??? ??? ??? ??? ??? ?描述
?? ??? ??? ?public Socket accept()?? ??? ??? ??? ??? ?偵聽要連接到此套接字并接受它。
?? ??? ??? ?public InetAddress getInetAddress()?? ??? ?返回此服務器套接字的本地地址。
?? ??? ??? ?public void close()?? ??? ??? ??? ??? ??? ?關閉此套接字。
?? ??? ??? ?
?? ??? ?5.4 TCP單項通訊的實現
?? ??? ??? ?java語言的基于套接字編程分為服務端編程和客戶端編程
?? ??? ??? ?5.4.1 服務器端實現步驟
?? ??? ??? ??? ?創建ServerSocket對象,并綁定端口
?? ??? ??? ??? ?通過accept方法監聽客戶端的請求
?? ??? ??? ??? ?建立連接后,通過輸入輸出流進行讀寫操作
?? ??? ??? ??? ?調用close方法關閉資源
?? ??? ??? ?5.4.2 客戶端實現步驟
?? ??? ??? ??? ?創建Socket對象,指定服務區ip和端口
?? ??? ??? ??? ?建立連接后,通過輸入輸出流進行讀寫操作
?? ??? ??? ??? ?通過輸出輸入流獲取服務器返回信息
?? ??? ??? ??? ?調用close方法關閉資源
?? ??? ??? ?注意:先啟動服務器端,再啟動客戶端
?? ??? ?5.5 TCP雙向通訊的實現
?? ??? ??? ?5.5.1 服務器端實現步驟
?? ??? ??? ??? ?1. 創建ServerSocket對象,綁定監聽端口;
?? ??? ??? ??? ?2. 通過accept()方法監聽客戶端請求;
?? ??? ??? ??? ?3. 使用輸入流接收客戶端發送的圖片,然后通過輸出流保存圖片
?? ??? ??? ??? ?4. 通過輸出流返回客戶端圖片收到。
?? ??? ??? ??? ?5. 調用close()方法關閉資源
?? ??? ??? ?5.5.2 客戶端實現步驟
?? ??? ??? ??? ?1. 創建socket對象,指明需要連接的服務器地址和端口號;
?? ??? ??? ??? ?2. 建立連接后,通過輸出流向服務器端發送圖片;
?? ??? ??? ??? ?3. 通過輸入流獲取服務器的響應信息;
?? ??? ??? ??? ?4. 調用close()方法關閉資源
?? ?
?? ?6.基于UDP協議的編程 掌握
?? ??? ?6.1 UDP協議編程概述
?? ??? ??? ?在UDP通信協議下,兩臺計算機之間進行數據交互,并不需要先建立連接,發送端直接往指定的IP和端口號上發送數據即可,
?? ??? ??? ?但是它并不能保證數據一定能讓對方收到,也不能確定什么時候可以送達
?? ??? ??? ?
?? ??? ??? ?java.net.DatagramSocket類和java.net.DatagramPacket類是使用UDP編程中需要使用的兩個類,并且發送端和接收端都需要使用這個倆類,并且發送端與接收端是兩個獨立的運行程序。
?? ??? ??? ?1. DatagramSocket:負責接收和發送數據,創建接收端時需要指定端口號。
?? ??? ??? ?2. DatagramPacket:負責把數據打包,創建發送端時需指定接收端的IP地址和端口。
?? ??? ?6.2 DataGramSocket概述
?? ??? ??? ?DatagramSocket類作為基于UDP協議的Socket,使用DatagramSocket類可以用于接收和發送數據,同時創建接收端時還需指定端口號。
?? ??? ??? ?
?? ??? ??? ?DatagramSocket類的構造方法:
?? ??? ??? ?方法名?? ?描述
?? ??? ??? ?public DatagramSocket()?? ?創建發送端的數據報套接字
?? ??? ??? ?public DatagramSocket(int port)?? ?創建接收端的數據報套接字,并指定端口號
?? ??? ??? ?
?? ??? ??? ?DatagramSocket類的常用方法:
?? ??? ??? ?方法名?? ?描述
?? ??? ??? ?public void send(DatagramPacket p)?? ?發送數據報。
?? ??? ??? ?public void receive(DatagramPacket p)?? ?接收數據報。
?? ??? ??? ?public void close()?? ?關閉數據報套接字。
?? ??? ?
?? ??? ?6.3 DatagramPacket概述
?? ??? ??? ?DatagramPacket類負責把發送的數據打包(打包的數據為byte類型的數組),并且創建發送端時需指定接收端的IP地址和端口。
?? ??? ??? ?
?? ??? ??? ?DatagramPacket類的構造方法:
?? ??? ??? ?方法名?? ?描述
?? ??? ??? ?public DatagramPacket(byte buf[], int offset, int length)?? ?創建接收端的數據報。
?? ??? ??? ?public DatagramPacket(byte buf[], int offset, int length, InetAddress address, int port)?? ?創建發送端的數據報,并指定接收端的IP地址和端口號。
?? ??? ??? ?
?? ??? ??? ?DatagramPacket類的常用方法:
?? ??? ??? ?方法名?? ?描述
?? ??? ??? ?public synchronized byte[] getData()?? ?返回數據報中存儲的數據
?? ??? ??? ?public synchronized int getLength()?? ?獲得發送或接收數據報中的長度
?? ??? ?6.4 基于UDP編程的實現
?? ??? ??? ?6.4.1 接收端實現步驟
?? ??? ??? ??? ?創建DatagramSocket對象(服務端),并指定端口號
?? ??? ??? ??? ?創建DatagramPacket對象(數據報)
?? ??? ??? ??? ?調用receive方法,用于接收數據報
?? ??? ??? ??? ?調用close方法關閉資源
?? ??? ??? ?6.4.2 發送端實現步驟
?? ??? ??? ??? ?創建DatagramSocket對象(發送端)
?? ??? ??? ??? ?創建DatagramPacket對象(數據報),并指定接收端ip地址和接口
?? ??? ??? ??? ?調用send方法,發送數據報
?? ??? ??? ??? ?調用close方法關閉資源