基于Java中UDP的廣播形式(實(shí)例講解)
UDP---用戶數(shù)據(jù)報(bào)協(xié)議,是一個(gè)簡(jiǎn)單的面向數(shù)據(jù)報(bào)的運(yùn)輸層協(xié)議。UDP不提供可靠性,它只是把應(yīng)用程序傳給IP層的數(shù)據(jù)報(bào)發(fā)送出去,但是并不能保證它們能到達(dá)目的地 ,也不能保證數(shù)據(jù)包到達(dá)的順序。由于UDP在傳輸數(shù)據(jù)報(bào)前不用在客戶和服務(wù)器之間建立一個(gè)連接,且沒(méi)有超時(shí)重發(fā)等機(jī)制,故而傳輸速度很快。
在Java中UDP的實(shí)現(xiàn):
* UDP:
* 客戶端:
* 1.創(chuàng)建用于UDP通信的socket對(duì)象---DatagramSocket(用于UDP數(shù)據(jù)的發(fā)送和接收)---數(shù)據(jù)報(bào)套接字
* 2.準(zhǔn)備數(shù)據(jù),封裝包----DatagramPacket(數(shù)據(jù)包)
* 3.發(fā)送數(shù)據(jù),通過(guò)send方法
* 4.關(guān)閉套接字對(duì)象--socket對(duì)象
* 服務(wù)器端: 接收數(shù)據(jù)
* 1.創(chuàng)建socket套接字對(duì)象,并綁定端口號(hào)
* 2.創(chuàng)建包對(duì)象,創(chuàng)建空數(shù)組,準(zhǔn)備接收數(shù)據(jù)
* 3.接收數(shù)據(jù)
* 4.關(guān)閉資源
* UDP廣播方式:
* 同一網(wǎng)段所有主機(jī)都能接收,前提是端口要監(jiān)聽(tīng)
* 客戶端發(fā)送廣播,開啟端口監(jiān)聽(tīng)的服務(wù)端接收并打印消息
* 廣播的實(shí)現(xiàn) :由客戶端發(fā)出廣播,服務(wù)器端接收
* String host = "255.255.255.255";//廣播地址--代表所有主機(jī)
* 10.0.122.255----代表前三個(gè)網(wǎng)段是 10.0.122的所有主機(jī)
代碼實(shí)現(xiàn):
客戶端(發(fā)送端):
import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; import java.net.SocketException; import java.net.UnknownHostException; public class UDP_client { public static void main(String[] args) throws IOException { //1.創(chuàng)建對(duì)象 //構(gòu)造數(shù)據(jù)報(bào)套接字并將其綁定到本地主機(jī)上任何可用的端口。 DatagramSocket socket = new DatagramSocket(); //2.打包 byte[] arr = "客戶端:哈哈。。。。".getBytes(); //四個(gè)參數(shù): 包的數(shù)據(jù) 包的長(zhǎng)度 主機(jī)對(duì)象 端口號(hào) DatagramPacket packet = new DatagramPacket (arr, arr.length,InetAddress.getByName("10.0.122.255") , 4000); //3.發(fā)送 socket.send(packet); //4.關(guān)閉資源 socket.close(); } }
服務(wù)器端(接收端):
import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.SocketException; import java.util.Arrays; public class UDP_server { public static void main(String[] args) throws IOException { //1 DatagramSocket serverSocket = new DatagramSocket(4000); //2 byte[] arr = new byte[1024]; DatagramPacket packet = new DatagramPacket(arr, arr.length); //3 當(dāng)程序運(yùn)行起來(lái)之后,receive方法會(huì)一直處于監(jiān)聽(tīng)狀態(tài) serverSocket.receive(packet); //從包中將數(shù)據(jù)取出 byte[] arr1 = packet.getData(); System.out.println(new String(arr1)); //4 serverSocket.close(); } }
結(jié)果:
前三個(gè)網(wǎng)段是 10.0.122的所有主機(jī)上的端口號(hào)為4000的服務(wù)器端,只要開著,都可以接收到 ---
客戶端:哈哈。。。。
以上這篇基于Java中UDP的廣播形式(實(shí)例講解)就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java序列化中子類、父類構(gòu)造函數(shù)問(wèn)題實(shí)例分析
這篇文章主要介紹了Java序列化中子類、父類構(gòu)造函數(shù)問(wèn)題,結(jié)合實(shí)例形式分析了java父類與子類構(gòu)造函數(shù)中序列化接口調(diào)用相關(guān)操作技巧與使用注意事項(xiàng),需要的朋友可以參考下2019-09-09教你如何精準(zhǔn)統(tǒng)計(jì)出你的接口"QPS"
今天小編就為大家分享一篇關(guān)于QPS的精準(zhǔn)計(jì)算方法,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2021-08-08alibaba?seata服務(wù)端具體實(shí)現(xiàn)
seata是來(lái)處理分布式服務(wù)之間互相調(diào)用的事務(wù)問(wèn)題,本文重點(diǎn)給大家介紹alibaba-seata實(shí)現(xiàn)方法,文中通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-02-02SpringBoot接入釘釘自定義機(jī)器人預(yù)警通知
本文主要介紹了SpringBoot接入釘釘自定義機(jī)器人預(yù)警通知,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-07-07SpringBoot中定制異常頁(yè)面的實(shí)現(xiàn)方法
這篇文章主要介紹了SpringBoot中定制異常頁(yè)面的實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09SpringBoot實(shí)現(xiàn)海量數(shù)據(jù)高效實(shí)時(shí)搜索功能
我們都知道隨著業(yè)務(wù)系統(tǒng)的發(fā)展和使用,數(shù)據(jù)庫(kù)存儲(chǔ)的業(yè)務(wù)數(shù)據(jù)量會(huì)越來(lái)越大,逐漸成為了業(yè)務(wù)系統(tǒng)的瓶頸,本文給大家介紹了Spring Boot業(yè)務(wù)系統(tǒng)如何實(shí)現(xiàn)海量數(shù)據(jù)高效實(shí)時(shí)搜索,文中有詳細(xì)的代碼示例,需要的朋友可以參考下2023-10-10如何把本地idea上的項(xiàng)目上傳到github上(推薦)
這篇文章主要介紹了如何把本地idea上的項(xiàng)目上傳到github上,本文通過(guò)圖文的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07