DatagramPacket和DatagramSocket[通俗易懂]
DatagramPacket
在碼頭發(fā)送和接收貨物時(shí)都需要使用集裝箱來裝載貨物,UDP通信也是一樣,發(fā)送和接收的數(shù)據(jù)也需要使用“集裝箱”進(jìn)行打包,為此JDK中提供了一個(gè)DatagramPacket類,該類的實(shí)例對象就相當(dāng)于一個(gè)集裝箱,用于封裝UDP通信中發(fā)送或者接收的數(shù)據(jù)。
在創(chuàng)建發(fā)送端和接收端的DatagramPacket對象時(shí),使用的構(gòu)造方法有所不同,接收端的構(gòu)造方法只需要接收一個(gè)字節(jié)數(shù)組來存放接收到的數(shù)據(jù),而發(fā)送端的構(gòu)造方法不但要接收存放了發(fā)送數(shù)據(jù)的字節(jié)數(shù)組,還需要指定發(fā)送端IP地址和端口號(hào)。接下來根據(jù)API文檔的內(nèi)容,對DatagramPacket的構(gòu)造方法進(jìn)行逐一詳細(xì)地講解。
使用該構(gòu)造方法在創(chuàng)建DatagramPacket對象時(shí),指定了封裝數(shù)據(jù)的字節(jié)數(shù)組和數(shù)據(jù)的大小,沒有指定IP地址和端口號(hào)。很明顯,這樣的對象只能用于接收端,不能用于發(fā)送端。因?yàn)榘l(fā)送端一定要明確指出數(shù)據(jù)的目的地(ip地址和端口號(hào)),而接收端不需要明確知道數(shù)據(jù)的來源,只需要接收到數(shù)據(jù)即可。
DatagramPacket
DatagramPacket數(shù)據(jù)包的作用就如同是“集裝箱”,可以將發(fā)送端或者接收端的數(shù)據(jù)封裝起來。然而運(yùn)輸貨物只有“集裝箱”是不夠的,還需要有碼頭。在程序中需要實(shí)現(xiàn)通信只有DatagramPacket數(shù)據(jù)包也同樣不行,為此JDK中提供的一個(gè)DatagramSocket類。DatagramSocket類的作用就類似于碼頭,使用這個(gè)類的實(shí)例對象就可以發(fā)送和接收DatagramPacket數(shù)據(jù)包,發(fā)送數(shù)據(jù)的過程如下圖所示。
在創(chuàng)建發(fā)送端和接收端的DatagramSocket對象時(shí),使用的構(gòu)造方法也有所不同,下面對DatagramSocket類中常用的構(gòu)造方法進(jìn)行講解。
該構(gòu)造方法用于創(chuàng)建發(fā)送端的DatagramSocket對象,在創(chuàng)建DatagramSocket對象時(shí),并沒有指定端口號(hào),此時(shí),系統(tǒng)會(huì)分配一個(gè)沒有被其它網(wǎng)絡(luò)程序所使用的端口號(hào)。
該構(gòu)造方法既可用于創(chuàng)建接收端的DatagramSocket對象,又可以創(chuàng)建發(fā)送端的DatagramSocket對象,在創(chuàng)建接收端的DatagramSocket對象時(shí),必須要指定一個(gè)端口號(hào),這樣就可以監(jiān)聽指定的端口。
上面我們講解了DatagramSocket的構(gòu)造方法,接下來對DatagramSocket類中的常用方法進(jìn)行詳細(xì)地講解。
總結(jié)
以上是生活随笔為你收集整理的DatagramPacket和DatagramSocket[通俗易懂]的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux的setsid命令有什么用
- 下一篇: iscsiadm 命令的总结「建议收藏」