介紹:
UDP為使用者資料報協議,在java中操縱UDP使用JDK中java.net
套件下的 DatagramSocket
和DatagramPacket
類,可以方便的控制使用者資料封包。
DatagramPacket
類別將資料位元組填入UDP包中,稱為資料報。
DatagramSocket
用來傳送這個套件。如果接受數據,可以從DatagramSocket中接受一個 DatagramPack對象,然後從該套件讀取資料的內容。
UDP是面向無連接的單工通信,它速度快。
線上影片教學推薦:java線上影片
#1、 DatagramSocket類別
建構函數:
DatagramSocket()
建立實例,通常用於客戶端編程,他並沒有特定的監聽端口,僅僅使用一個臨時的。
DatagramSocket(int port)
建立實例,並固定監聽Port埠的封包。
DatagramSocket(int port, InetAddress laddr)
這是一個非常有用的建構器,當一台機器擁有多於一個IP位址的時候,由它所建立的實例只會接收來自LocalAddr的封包。
DatagramSocket(SocketAddress bindaddr)
bindaddr物件中指定了連接埠和位址。
常用函數:
receive(DatagramPacket p)
接收資料封包到p中。 receive方法是阻塞的,如果沒有接收到資料封包的話就會阻塞在哪裡。
send(DatagramPacket p)
發送封包p到目的地。
setSoTimeout(int timeout)
設定超時時間,單位為毫秒。
close()
關閉DatagramSocket。在應用程式退出的時候,通常會主動的釋放資源,關閉Socket,但是由於異常的退出可能造成資源無法回收。所以應該在程式完成的時候,主動使用此方法關閉Socket,或在捕獲到異常後關閉Socket。
2、 DatagramPacket類別
#DatagramPacket類別用於處理封包,將位元組陣列、目標位址、目標連接埠等資料包裝成報文或將報文拆成位元組數組。
建構子:
DatagramPacket(byte[] buf, int length, InetAddress addr, int port)
從buf位元組數組中取出offset開始的、length長的資料建立資料對象,目標位址是addr,目標埠是port。
DatagramPacket(byte buf[], int offset, int length, SocketAddress address)
從buf位元組數組中取出offset開始的、length長的資料建立資料對象,目標位址是address
常用函數:
getData() byte[]
從實例中取得報文中的位元組數組編碼。
setData(byte[] buf, int offset, int length)
設定資料封包中的資料內容
3、UDP通訊的通訊流程
UDP傳送端:
1、建立updsocket服務。
2、提供數據,並將資料封裝到資料包中。
3、透過socket服務的發送功能,將封包發出去。
4、關閉資源。
UDP接收端:
1、定義udpsocket服務,通常會監聽一個連接埠。
2、定義一個資料包,儲存接收到的位元組資料。
3、透過socket服務的receive方法將收到的資料存入已定義好的資料包中。
4、透過資料包物件的獨特功能,將這些不同的資料取出,列印在控制台上。
5、關閉資源。
更多相關問題請造訪java文章教學:java入門
以上是詳細介紹java UDP通信的詳細內容。更多資訊請關注PHP中文網其他相關文章!