【Java 网络编程】UDP API 简介 ( DatagramSocket | DatagramPacket )
文章目錄
- I DatagramSocket
- II DatagramSocket 構(gòu)造方法
- III DatagramSocket 數(shù)據(jù)操作
- IV DatagramPacket
- V DatagramPacket 構(gòu)造方法
- VI DatagramPacket 設(shè)置參數(shù)
- VII DatagramPacket 獲取參數(shù)
- VIII DatagramPacket IP 地址 端口號 說明
I DatagramSocket
DatagramSocket 類簡介 : 負責 UDP 數(shù)據(jù)的發(fā)送和接收 , 該類沒有合并到 Socket API 中 , 因為在 Socket 協(xié)議中 , 必須要存在服務(wù)器端與客戶端 , 在 UDP 中 , DatagramSocket 既是服務(wù)器又是客戶端 , 其不需要監(jiān)聽端口 , 也不需要建立連接 ;
II DatagramSocket 構(gòu)造方法
DatagramSocket 構(gòu)造方法 :
- ① DatagramSocket() : 創(chuàng)建對象 , 不指定監(jiān)聽的端口與 IP 地址 ; 使用該對象發(fā)送 UDP 數(shù)據(jù) , 其會自動尋找可用的端口 , 將數(shù)據(jù)發(fā)送出去 ;
- ② DatagramSocket(int port) : 創(chuàng)建對象 , 該 Socket 會監(jiān)聽固定端口 ; 注意該端口是用于監(jiān)聽數(shù)據(jù)接收的 ; 發(fā)送數(shù)據(jù)使用的不是該端口號 ;
- ③ DatagramSocket(int port , InetAddress localAddr) : 創(chuàng)建對象 , 該對象監(jiān)聽固定端口與指定的 IP 地址 ; 如果計算機本地有多個 IP 地址 , 此時就可以指定只監(jiān)聽某個 IP 地址的端口 ;
III DatagramSocket 數(shù)據(jù)操作
1. 接收數(shù)據(jù)方法 : receive( DatagramPacket dp ) : 接收數(shù)據(jù) ;
2. 發(fā)送數(shù)據(jù) : send( DatagramPacket dp ) : 發(fā)送數(shù)據(jù) ;
3. 設(shè)置超時時間 : setSoTimeout ( int timeout ) : 設(shè)置超時時間 , 單位毫秒 ;
4. 釋放資源 : close() ;
IV DatagramPacket
DatagramPacket : 用于處理報文 , 其封裝了發(fā)送的信息 byte[] 數(shù)組 , 目標 IP 地址 , 目標端口號等信息 , 封裝成報文 ; 也可以將報文拆解成 byte[] 數(shù)組信息 ; 該類時 UDP 數(shù)據(jù)的發(fā)送和接收的實體 ;
V DatagramPacket 構(gòu)造方法
DatagramPacket 構(gòu)造方法 :
- ① DatagramPacket ( byte[] buffer , int offset , int length , InetAddress addr , int port ) : 其中 offset 和 length 指定了 buffer 數(shù)組的可用區(qū)間 ; 后面的兩個參數(shù)指定目標設(shè)設(shè)備的 IP 地址與端口號 ; 該 IP 地址和端口僅在發(fā)送時有效 ;
- ② DatagramPacket ( byte[] buffer , int offset , int length , SocketAddress address ) : 前三個參數(shù)用于制定要發(fā)送的 byte[] 數(shù)組信息 , SocketAddress 中封裝了 IP 地址和端口號 ;
VI DatagramPacket 設(shè)置參數(shù)
DatagramPacket 設(shè)置數(shù)據(jù) :
- ① setData ( byte[] buffer , int offset , int length ) , 如果在構(gòu)造函數(shù)中沒有設(shè)置數(shù)據(jù) , 或者想要替換發(fā)送的數(shù)據(jù) , 可以調(diào)用該方法設(shè)置要發(fā)送的數(shù)據(jù) ;
- ② setData ( byte[] buffer) : 設(shè)置整個 byte[] 數(shù)組作為要發(fā)送的數(shù)據(jù) ;
- ③ setLength ( int len ) : 設(shè)置數(shù)據(jù)有效區(qū)間 ;
- ④ setAddress ( InetAddress addr ) : 設(shè)置接受數(shù)據(jù)目標的地址 ; 注意這個 IP 地址發(fā)送時有效 , 接收時無效 ;
- ⑤ setPort ( int port ) : 設(shè)置接收數(shù)據(jù)的端口號 ; 注意這個端口號發(fā)送時有效 , 接收時無效 ;
- ⑥ setSocketAddress ( SocketAddress address ) : 設(shè)置 IP 地址 + 端口號數(shù)據(jù) ;
VII DatagramPacket 獲取參數(shù)
DatagramPacket 獲取數(shù)據(jù) :
- ① getData() : 獲取發(fā)送或接受的數(shù)據(jù) ;
- ② getOffset() : 獲取 byte[] 數(shù)組數(shù)據(jù)有效數(shù)據(jù)的開始位置 ;
- ③ getLength() : 獲取 byte[] 數(shù)組數(shù)據(jù)的有效長度 ;
- ④ getAddress() : 獲取 IP 地址信息 ;
- ⑤ getPort() : 獲取端口號信息 ;
- ⑥ getSocketAddress ( SocketAddress address ) : 獲取 IP 地址 + 端口號數(shù)據(jù) ;
VIII DatagramPacket IP 地址 端口號 說明
關(guān)于 DatagramPacket 的 IP 地址和端口號說明 : 這個 IP 地址和端口號僅在發(fā)送時是有效的 , 接收時是無效的 , 在接收到數(shù)據(jù)時 , IP 地址和端口號是系統(tǒng)解析完報文后 , 自動設(shè)置到 DatagramPacket 對象中的 , 僅用于說明該數(shù)據(jù)是由哪個設(shè)備的 IP 地址和端口號發(fā)送的 ;
總結(jié)
以上是生活随笔為你收集整理的【Java 网络编程】UDP API 简介 ( DatagramSocket | DatagramPacket )的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Java 网络编程】UDP 简介
- 下一篇: 【Java 网络编程】UDP 服务器 客