Java網(wǎng)絡(luò)編程之UDP網(wǎng)絡(luò)通信詳解
1.UDP網(wǎng)絡(luò)通信編程原理
1.1 UDP網(wǎng)絡(luò)通信編程介紹
類 DatagramSocket 何 DatagramPacket(數(shù)據(jù)包/數(shù)據(jù)報(bào)) 實(shí)現(xiàn)了基于 UDP協(xié)議網(wǎng)絡(luò)程序;
UDP數(shù)據(jù)報(bào)通過數(shù)據(jù)報(bào)套接字 DatagramSocket 發(fā)送和接收,系統(tǒng)不保證 UDP數(shù)據(jù)報(bào)一定能夠安全送達(dá)目的地,也不確定什么時(shí)候可以抵達(dá);
DatagramPacket 對(duì)象封裝了 UDP數(shù)據(jù)報(bào),在數(shù)據(jù)報(bào)中包含了發(fā)送端IP地址和端口號(hào),以及接收端的IP地址和端口號(hào);
UDP協(xié)議中每個(gè)數(shù)據(jù)報(bào)都給出了完整的地址信息,因此無法建立發(fā)送方與接收方的連接。
沒有明確的服務(wù)端和客戶端,演變成數(shù)據(jù)的發(fā)送端和接收端;
接收數(shù)據(jù)和發(fā)送數(shù)據(jù)都是通過 DatagramSocket 對(duì)象完成。
1.2 UDP網(wǎng)絡(luò)通信編程的基本流程
核心的兩個(gè)類/對(duì)象,DatagramSocket與DatagramPacket;
建立發(fā)送端和接收端;
建立數(shù)據(jù)包;
調(diào)用DatagramSocket的發(fā)送和接收方法;
關(guān)閉DatagramSocket。
2.UDP網(wǎng)絡(luò)通信編程案例
1.編寫一個(gè)接收端A,一個(gè)發(fā)送端B;
2.接收端在 9999端口等待接收數(shù)據(jù)(receive);
3.發(fā)送端向接收端發(fā)送數(shù)據(jù):“你好!接收端”;
4.接收端接收到發(fā)送端的數(shù)據(jù)后,回復(fù):“你好!發(fā)送端”,再退出;
5.發(fā)送端接收回復(fù)的數(shù)據(jù),退出。
UDPReceiverA
import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAddress; /** * @author 興趣使然黃小黃 * @version 1.0 * 接收端A */ public class UDPReceiverA { public static void main(String[] args) throws IOException { //1.創(chuàng)建一個(gè)DatagramSocket對(duì)象,準(zhǔn)備在9999接收數(shù)據(jù) DatagramSocket socket = new DatagramSocket(9999); //2.構(gòu)建一個(gè)DatagramPacket對(duì)象,準(zhǔn)備接收數(shù)據(jù) byte[] buf = new byte[1024]; DatagramPacket packet = new DatagramPacket(buf, buf.length); //3.調(diào)用接收方法,將通過網(wǎng)絡(luò)傳輸?shù)?DatagramPacket對(duì)象 填充到 packet對(duì)象 System.out.println("接收端A 等待接收數(shù)據(jù)..."); socket.receive(packet); //4.把packet進(jìn)行拆包,取出數(shù)據(jù) int length = packet.getLength();//實(shí)際數(shù)據(jù)字節(jié)長(zhǎng)度 byte[] data = packet.getData();//實(shí)際接收的數(shù)據(jù) String s = new String(data, 0, length); System.out.println(s); //回復(fù)信息給B端 data = "你好!發(fā)送端".getBytes(); packet = new DatagramPacket(data, 0, data.length, InetAddress.getLocalHost(), 9998); socket.send(packet); //5.關(guān)閉資源 socket.close(); } }
UDPSenderB
import java.io.IOException; import java.net.*; /** * @author 興趣使然黃小黃 * @version 1.0 * 發(fā)送端B */ public class UDPSenderB { public static void main(String[] args) throws IOException { //1.創(chuàng)建 DatagramSocket 對(duì)象,準(zhǔn)備在9998發(fā)送和接收數(shù)據(jù) DatagramSocket socket = new DatagramSocket(9998); //2.將需要發(fā)送的數(shù)據(jù),封裝到 DatagramPacket 中 byte[] data = "你好!接收端".getBytes(); DatagramPacket datagramPacket = new DatagramPacket(data, 0, data.length, InetAddress.getLocalHost(), 9999); socket.send(datagramPacket); //接收A消息 socket.receive(datagramPacket); int length = datagramPacket.getLength();//實(shí)際數(shù)據(jù)字節(jié)長(zhǎng)度 data = datagramPacket.getData();//實(shí)際接收的數(shù)據(jù) String s = new String(data, 0, length); System.out.println(s); //關(guān)閉資源 socket.close(); } }
到此這篇關(guān)于Java網(wǎng)絡(luò)編程之UDP網(wǎng)絡(luò)通信詳解的文章就介紹到這了,更多相關(guān)Java UDP網(wǎng)絡(luò)通信內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- Java Socket實(shí)現(xiàn)UDP編程淺析
- Java網(wǎng)絡(luò)編程之UDP實(shí)現(xiàn)原理解析
- Java網(wǎng)絡(luò)編程UDP協(xié)議發(fā)送接收數(shù)據(jù)
- Java網(wǎng)絡(luò)編程UDP實(shí)現(xiàn)消息發(fā)送及聊天
- Java網(wǎng)絡(luò)編程UDP實(shí)現(xiàn)多線程在線聊天
- Java編程使用UDP建立群聊系統(tǒng)代碼實(shí)例
- JAVA編程實(shí)現(xiàn)UDP網(wǎng)絡(luò)通訊的方法示例
- Java實(shí)現(xiàn)基于UDP協(xié)議的網(wǎng)絡(luò)通信UDP編程
相關(guān)文章
SpringBoot中@EnableAsync和@Async注解的使用小結(jié)
在SpringBoot中,可以通過@EnableAsync注解來啟動(dòng)異步方法調(diào)用的支持,通過@Async注解來標(biāo)識(shí)異步方法,讓方法能夠在異步線程中執(zhí)行,本文就來介紹一下,感興趣的可以了解一下2023-11-11配置hadoop環(huán)境mapreduce連接不上hdfs解決
這篇文章主要為大家介紹了配置hadoop環(huán)境mapreduce連接不上hdfs解決方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-10-10Spring Security結(jié)合JWT的方法教程
這篇文章主要給大家介紹了關(guān)于Spring Security結(jié)合JWT的方法教程,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-12-12springboot tomcat的maxHttpFormPostSize參數(shù)示例解析
這篇文章主要介紹了springboot tomcat的maxHttpFormPostSize參數(shù)示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08java多線程加鎖以及Condition類的使用實(shí)例解析
這篇文章主要介紹了java多線程加鎖以及Condition類的使用實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11