UDP答應一個應用程序以架空的方式發送數據包并且它被用作一些重要的標準,比如DNS和RADIUS。盡管很多程序員不熟悉這個協議,因為對于程序來說它太難了,對于TCP來說它的使用的頻率太低。但是,這個協議是非常值得我們去學習的,因為當你在沒有創建TCP連接的時候,假如要在各程序之間以消息的形式改變數據,利用UDP是最適合的。當這個消息很短并且你不需要傳統上的連接的時候,UDP將是最理想的協議。
UDP的基本形式
UDP以數據包的形式發送和接收數據。它和TCP不同的是,它沒有連接的概念,每個數據包是單獨的發送,并且沒有發送的擔保。當幾個數據包被發送到相同的位置的時候,它們可以采用不同的順序。假如你需要發送擔保和分類擔保,他們就必須有程序執行UDP的最高協議,這個協議在UDP的認證包,超時和中繼,順序包等等。或者你應該考慮使用TCP來代替。
和TCP一樣,為了發送和接收數據包,你需要一個適當的網絡插口,所以要java.net.DatagraSocket 類。和TCP不同的是,客戶插口和服務器插口沒有區別,那就是說,一個DatagramSocket可以在任何時候發送和接收數據。
DatagramSocket雖然很方便,但是它的使用和機器的地址和端有關,這些取決于這個機器自己的構造器。這個關聯決定了地址的來源和包傳送的插口所在的端口,并且這個地址和插口的端口在接收數據時隨時候命。
假如使用的電腦有多個ip地址,你可以將插口變為一個專用地址或者是通配符地址,專用地址是指電腦上所有的IP地址。在這種情況下插口會監聽所有的即將到來的數據包,但是輸出的數據包地址將由分界面決定,就是有連接電腦的路由器決定。
發送和接收數據
被發送或者接收數據是有java.net.DatagramPacket 類來決定的。假如你要發送數據包,你必須使用DatagramPacket包,設置你想發送包去的方位的端口和IP地址,并設置好數據的緩沖器。
在返回的時候, DatagramPacket的數據緩沖器將作為一個參數通過,這個參數把握了所有接收的數據。假如這個數據的大小大于緩沖器的大小,將把多余的字節刪除,DatagramPacke同樣將包含發送者的地址和端口。
連接遠端端口
UDP的一個確定就是你必須在每個包上指定目的地的地址和端口。另外UDP插口會從任何主機上接收包,這樣使你無法控制所接受的數據。
但是,DatagramPacket類提供了遠程主機創建連接的概念,遠程主機單一化的執行決定于UDP。這個單一的特點由DatagramSocket.connect()來執行,它用來連接插口到遠程主機。
注重到連接通過過濾包裹發送和接收,那就是說,它并沒有和遠程主機建立一個真正的連接,所以,這個方法不象TCP,它自己不會發送任何數據包,也永遠不會接受數據失敗。
新聞熱點
疑難解答