Java網絡編程之UDP網絡通信詳解
1.UDP網絡通信編程原理
1.1 UDP網絡通信編程介紹
類 DatagramSocket 何 DatagramPacket(數據包/數據報) 實現了基于 UDP協(xié)議網絡程序;
UDP數據報通過數據報套接字 DatagramSocket 發(fā)送和接收,系統(tǒng)不保證 UDP數據報一定能夠安全送達目的地,也不確定什么時候可以抵達;
DatagramPacket 對象封裝了 UDP數據報,在數據報中包含了發(fā)送端IP地址和端口號,以及接收端的IP地址和端口號;
UDP協(xié)議中每個數據報都給出了完整的地址信息,因此無法建立發(fā)送方與接收方的連接。
沒有明確的服務端和客戶端,演變成數據的發(fā)送端和接收端;
接收數據和發(fā)送數據都是通過 DatagramSocket 對象完成。
1.2 UDP網絡通信編程的基本流程
核心的兩個類/對象,DatagramSocket與DatagramPacket;
建立發(fā)送端和接收端;
建立數據包;
調用DatagramSocket的發(fā)送和接收方法;
關閉DatagramSocket。
2.UDP網絡通信編程案例
1.編寫一個接收端A,一個發(fā)送端B;
2.接收端在 9999端口等待接收數據(receive);
3.發(fā)送端向接收端發(fā)送數據:“你好!接收端”;
4.接收端接收到發(fā)送端的數據后,回復:“你好!發(fā)送端”,再退出;
5.發(fā)送端接收回復的數據,退出。
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)建一個DatagramSocket對象,準備在9999接收數據
DatagramSocket socket = new DatagramSocket(9999);
//2.構建一個DatagramPacket對象,準備接收數據
byte[] buf = new byte[1024];
DatagramPacket packet = new DatagramPacket(buf, buf.length);
//3.調用接收方法,將通過網絡傳輸的 DatagramPacket對象 填充到 packet對象
System.out.println("接收端A 等待接收數據...");
socket.receive(packet);
//4.把packet進行拆包,取出數據
int length = packet.getLength();//實際數據字節(jié)長度
byte[] data = packet.getData();//實際接收的數據
String s = new String(data, 0, length);
System.out.println(s);
//回復信息給B端
data = "你好!發(fā)送端".getBytes();
packet = new DatagramPacket(data, 0, data.length,
InetAddress.getLocalHost(), 9998);
socket.send(packet);
//5.關閉資源
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 對象,準備在9998發(fā)送和接收數據
DatagramSocket socket = new DatagramSocket(9998);
//2.將需要發(fā)送的數據,封裝到 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();//實際數據字節(jié)長度
data = datagramPacket.getData();//實際接收的數據
String s = new String(data, 0, length);
System.out.println(s);
//關閉資源
socket.close();
}
}


到此這篇關于Java網絡編程之UDP網絡通信詳解的文章就介紹到這了,更多相關Java UDP網絡通信內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
SpringBoot中@EnableAsync和@Async注解的使用小結
在SpringBoot中,可以通過@EnableAsync注解來啟動異步方法調用的支持,通過@Async注解來標識異步方法,讓方法能夠在異步線程中執(zhí)行,本文就來介紹一下,感興趣的可以了解一下2023-11-11
配置hadoop環(huán)境mapreduce連接不上hdfs解決
這篇文章主要為大家介紹了配置hadoop環(huán)境mapreduce連接不上hdfs解決方法,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-10-10
springboot tomcat的maxHttpFormPostSize參數示例解析
這篇文章主要介紹了springboot tomcat的maxHttpFormPostSize參數示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-08-08

