基于Java中UDP的廣播形式(實例講解)
UDP---用戶數(shù)據(jù)報協(xié)議,是一個簡單的面向數(shù)據(jù)報的運輸層協(xié)議。UDP不提供可靠性,它只是把應(yīng)用程序傳給IP層的數(shù)據(jù)報發(fā)送出去,但是并不能保證它們能到達(dá)目的地 ,也不能保證數(shù)據(jù)包到達(dá)的順序。由于UDP在傳輸數(shù)據(jù)報前不用在客戶和服務(wù)器之間建立一個連接,且沒有超時重發(fā)等機制,故而傳輸速度很快。
在Java中UDP的實現(xiàn):
* UDP:
* 客戶端:
* 1.創(chuàng)建用于UDP通信的socket對象---DatagramSocket(用于UDP數(shù)據(jù)的發(fā)送和接收)---數(shù)據(jù)報套接字
* 2.準(zhǔn)備數(shù)據(jù),封裝包----DatagramPacket(數(shù)據(jù)包)
* 3.發(fā)送數(shù)據(jù),通過send方法
* 4.關(guān)閉套接字對象--socket對象
* 服務(wù)器端: 接收數(shù)據(jù)
* 1.創(chuàng)建socket套接字對象,并綁定端口號
* 2.創(chuàng)建包對象,創(chuàng)建空數(shù)組,準(zhǔn)備接收數(shù)據(jù)
* 3.接收數(shù)據(jù)
* 4.關(guān)閉資源
* UDP廣播方式:
* 同一網(wǎng)段所有主機都能接收,前提是端口要監(jiān)聽
* 客戶端發(fā)送廣播,開啟端口監(jiān)聽的服務(wù)端接收并打印消息
* 廣播的實現(xiàn) :由客戶端發(fā)出廣播,服務(wù)器端接收
* String host = "255.255.255.255";//廣播地址--代表所有主機
* 10.0.122.255----代表前三個網(wǎng)段是 10.0.122的所有主機
代碼實現(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)建對象
//構(gòu)造數(shù)據(jù)報套接字并將其綁定到本地主機上任何可用的端口。
DatagramSocket socket = new DatagramSocket();
//2.打包
byte[] arr = "客戶端:哈哈。。。。".getBytes();
//四個參數(shù): 包的數(shù)據(jù) 包的長度 主機對象 端口號
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)程序運行起來之后,receive方法會一直處于監(jiān)聽狀態(tài)
serverSocket.receive(packet);
//從包中將數(shù)據(jù)取出
byte[] arr1 = packet.getData();
System.out.println(new String(arr1));
//4
serverSocket.close();
}
}
結(jié)果:
前三個網(wǎng)段是 10.0.122的所有主機上的端口號為4000的服務(wù)器端,只要開著,都可以接收到 ---
客戶端:哈哈。。。。
以上這篇基于Java中UDP的廣播形式(實例講解)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java 多線程synchronized關(guān)鍵字詳解(六)
這篇文章主要介紹了Java 多線程synchronized關(guān)鍵字詳解(六)的相關(guān)資料,需要的朋友可以參考下2015-12-12
SpringBoot動態(tài)生成接口實現(xiàn)流程示例講解
最近遇到一個需求,需要在程序運行過程中,可以動態(tài)新增接口,自定義接口參數(shù)名稱,基本類型,以及請求方法,請求頭等等。通過幾天的研究,找到了我需要的解決方案2023-01-01
IDEA創(chuàng)建父項目和子項目的實現(xiàn)步驟
本文主要介紹了IDEA創(chuàng)建父項目和子項目的實現(xiàn)步驟,文中通過圖文介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-07-07
Java中instanceof關(guān)鍵字的用法總結(jié)
instanceof是Java的一個二元操作符,和==,>,<是同一類東東。由于它是由字母組成的,所以也是Java的保留關(guān)鍵字。它的作用是測試它左邊的對象是否是它右邊的類的實例,返回boolean類型的數(shù)據(jù)2013-10-10
mybatis-flex實現(xiàn)鏈?zhǔn)讲僮鞯氖纠a
MyBatis-Flex它提供了一種鏈?zhǔn)讲僮鞣绞?本文主要介紹了mybatis-flex實現(xiàn)鏈?zhǔn)讲僮鞯氖纠a,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-06-06

