JAVA套接字編程之UDP編程

JAVA套接字之UDP編程

1 UDP協(xié)議

用戶數(shù)據(jù)報協(xié)議UDP是無連接的服務。在無連接的情況下,兩個實體之間的通信不需要建立好一個連接,因此其下層的有關資源不需要事先進行預訂的保留。這些資源在數(shù)據(jù)傳輸時動態(tài)的進行分配。

無連接服務的另一個特征就是他不需要通信的兩個實體同時是活躍的(即處于激活狀態(tài))砾省。當發(fā)送端的實體正在進行發(fā)送時,它才是活躍的混槐。

無連接服務的優(yōu)點就是靈活方便并且比較迅速编兄。但是無連接服務不能防止報文的丟失、重復或失序声登。無連接服務特別適合傳輸少量零星的報文狠鸳。

在java中操縱UDP使用JDK中java.net包下的DatagramSocket和DatagramPacket類,可以方便的控制用戶數(shù)據(jù)報文悯嗓。DatagramPacket類將數(shù)據(jù)字節(jié)填充到UDP包中件舵,這稱為數(shù)據(jù)報。 DatagramSocket來發(fā)送這個包脯厨。要接受數(shù)據(jù)铅祸,可以從DatagramSocket中接受一個 DatagramPack對象,然后從該包中讀取數(shù)據(jù)的內容。

使用UDP傳輸數(shù)據(jù)是有大小限制的临梗,每個被傳輸?shù)臄?shù)據(jù)報必須限定在64KB之內涡扼。

2 DatagramSocket類

構造函數(shù)

構造函數(shù) 說明
DatagramSocket() 創(chuàng)建實例,通常用于客戶端編程盟庞,他并沒有特定的監(jiān)聽端口吃沪,僅僅使用一個臨時的。
DatagramSocket(int port) 創(chuàng)建實例什猖,并固定監(jiān)聽Port端口的報文票彪。
DatagramSocket(int port, InetAddress laddr) 這是個非常有用的構建器,當一臺機器擁有多于一個IP地址的時候不狮,由它創(chuàng)建的實例僅僅接收來自LocalAddr的報文降铸。
DatagramSocket(SocketAddress bindaddr) bindaddr對象中指定了端口和地址。

常用函數(shù)

常用函數(shù) 說明
receive(DatagramPacket p) 接收數(shù)據(jù)報文到p中荤傲。注意:receive方法是阻塞的垮耳,如果沒有接收到數(shù)據(jù)報包的話就會阻塞在哪里颈渊。
send(DatagramPacket p) 發(fā)送報文p到目的地遂黍。
setSoTimeout(int timeout) 設置超時時間,單位為毫秒俊嗽。
close() 關閉DatagramSocket雾家。在應用程序退出的時候,通常會主動的釋放資源绍豁,關閉Socket芯咧,但是由于異常的退出可能造成資源無法回收。所以應該在程序完成的時候竹揍,主動使用此方法關閉Socket敬飒,或在捕獲到異常后關閉Socket。

注意

  1. 在創(chuàng)建DatagramSocket類實例時芬位,如果端口已經(jīng)被使用无拗,會產(chǎn)生一個SocketException的異常拋出,并導致程序非法終止昧碉,這個異常應該注意捕獲英染。
  2. “阻塞”是一個專業(yè)名詞,它會產(chǎn)生一個內部循環(huán)被饿,是程序暫停在這個地方四康,直到條件被觸發(fā)。

3 DatagramPacket類

用于處理報文狭握,將字節(jié)數(shù)組闪金、目標地址、目標端口等數(shù)據(jù)包裝成報文或者將報文拆卸成字節(jié)數(shù)組论颅。

構造函數(shù)

構造函數(shù) 說明
DatagramPacket(byte[] buf, int length, InetAddress addr, int port) 從buf字節(jié)數(shù)組中取出offset開始的哎垦、length長的數(shù)據(jù)創(chuàng)建數(shù)據(jù)對象喝检,目標地址是addr,目標端口是port撼泛。
DatagramPacket(byte buf[], int offset, int length, SocketAddress address) 從buf字節(jié)數(shù)組中取出offset開始的挠说、length長的數(shù)據(jù)創(chuàng)建數(shù)據(jù)對象,目標地址是address

常用函數(shù)

常用函數(shù) 說明
getData() byte[] 從實例中取得報文中的字節(jié)數(shù)組編碼愿题。
setData(byte[] buf, int offset, int length) 設置數(shù)據(jù)報包中的數(shù)據(jù)內容

參考博文

http://blog.csdn.net/redarmy_chen/article/details/12784909

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末损俭,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子潘酗,更是在濱河造成了極大的恐慌杆兵,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,265評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件仔夺,死亡現(xiàn)場離奇詭異琐脏,居然都是意外死亡,警方通過查閱死者的電腦和手機缸兔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評論 2 385
  • 文/潘曉璐 我一進店門日裙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人惰蜜,你說我怎么就攤上這事昂拂。” “怎么了抛猖?”我有些...
    開封第一講書人閱讀 156,852評論 0 347
  • 文/不壞的土叔 我叫張陵格侯,是天一觀的道長。 經(jīng)常有香客問我财著,道長联四,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,408評論 1 283
  • 正文 為了忘掉前任撑教,我火速辦了婚禮朝墩,結果婚禮上,老公的妹妹穿的比我還像新娘驮履。我一直安慰自己鱼辙,他們只是感情好,可當我...
    茶點故事閱讀 65,445評論 5 384
  • 文/花漫 我一把揭開白布玫镐。 她就那樣靜靜地躺著倒戏,像睡著了一般。 火紅的嫁衣襯著肌膚如雪恐似。 梳的紋絲不亂的頭發(fā)上杜跷,一...
    開封第一講書人閱讀 49,772評論 1 290
  • 那天,我揣著相機與錄音,去河邊找鬼葛闷。 笑死憋槐,一個胖子當著我的面吹牛,可吹牛的內容都是我干的淑趾。 我是一名探鬼主播阳仔,決...
    沈念sama閱讀 38,921評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼扣泊!你這毒婦竟也來了近范?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,688評論 0 266
  • 序言:老撾萬榮一對情侶失蹤延蟹,失蹤者是張志新(化名)和其女友劉穎评矩,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體阱飘,經(jīng)...
    沈念sama閱讀 44,130評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡斥杜,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,467評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了沥匈。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蔗喂。...
    茶點故事閱讀 38,617評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖咐熙,靈堂內的尸體忽然破棺而出弱恒,到底是詐尸還是另有隱情,我是刑警寧澤棋恼,帶...
    沈念sama閱讀 34,276評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站锈玉,受9級特大地震影響爪飘,放射性物質發(fā)生泄漏。R本人自食惡果不足惜拉背,卻給世界環(huán)境...
    茶點故事閱讀 39,882評論 3 312
  • 文/蒙蒙 一师崎、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧椅棺,春花似錦犁罩、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,740評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至诱渤,卻和暖如春丐巫,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,967評論 1 265
  • 我被黑心中介騙來泰國打工递胧, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留碑韵,地道東北人。 一個月前我還...
    沈念sama閱讀 46,315評論 2 360
  • 正文 我出身青樓缎脾,卻偏偏與公主長得像祝闻,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子遗菠,可洞房花燭夜當晚...
    茶點故事閱讀 43,486評論 2 348

推薦閱讀更多精彩內容