JAVA編程實現(xiàn)UDP網(wǎng)絡(luò)通訊的方法示例
本文實例講述了JAVA編程實現(xiàn)UDP網(wǎng)絡(luò)通訊的方法。分享給大家供大家參考,具體如下:
UDP協(xié)議全稱是用戶數(shù)據(jù)報協(xié)議,在網(wǎng)絡(luò)中它與TCP協(xié)議一樣用于處理數(shù)據(jù)包,是一種無連接的協(xié)議。
在OSI模型中,在第四層——傳輸層,處于IP協(xié)議的上一層。UDP有不提供數(shù)據(jù)包分組、組裝和不能對數(shù)據(jù)包進行排序的缺點:
也就是說,當(dāng)報文發(fā)送之后,是無法得知其是否安全完整到達的。UDP用來支持那些需要在計算機之間傳輸數(shù)據(jù)的網(wǎng)絡(luò)應(yīng)用。
采用UDP協(xié)議要先把數(shù)據(jù)定義成數(shù)據(jù)報(Datagram)并在數(shù)據(jù)報中指明數(shù)據(jù)所要達到的Socket,再進行數(shù)據(jù)傳遞。
主要涉及的兩個類:
DatagramPacket:數(shù)據(jù)報包類
DatagramSocket:數(shù)據(jù)端對端通訊類
簡單demo之UDP服務(wù)端:
public class UdpServer {
public static void main(String[] args) {
// 實現(xiàn)步驟1:創(chuàng)建DatagramSokcet
try {
DatagramSocket mSocket = new DatagramSocket(9999);
// 實現(xiàn)步驟2:創(chuàng)建DatagramPacket
byte[] data = new byte[1024];
DatagramPacket mPacket = new DatagramPacket(data, data.length);
// 實現(xiàn)步驟3:接收 數(shù)據(jù)
mSocket.receive(mPacket);
// 實現(xiàn)步驟4:處理數(shù)據(jù)
String result = new String(data, 0, mPacket.getLength());
System.out.println(result);
/**** 回復(fù)客戶端 ****************/
byte[] response = "我是UDP服務(wù)端,已經(jīng)回到你的請求".getBytes();
mPacket.setData(response);
mSocket.send(mPacket);
mSocket.close();
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
簡單demo之UDP客戶端:
public class UdpClient {
private static String sendData = "我是UDP客戶端,請求連接服務(wù)端";
public static void main(String[] args) {
try {
// 步驟1:指定服務(wù)器的信息
InetAddress mAddress = InetAddress.getByName("localhost");
int port = 9999;
byte[] data = sendData.getBytes();
// 步驟2:創(chuàng)建DatagramPacket
DatagramPacket mPacket = new DatagramPacket(data, data.length,
mAddress, port);
// 步驟3:創(chuàng)建DatagramSocket
DatagramSocket mSocket = new DatagramSocket();
// 步驟4:向服務(wù)端發(fā)送數(shù)據(jù)
mSocket.send(mPacket);
/***** 下面接收服務(wù)器返回數(shù)據(jù) ***************************/
// 實現(xiàn)步驟3:接收 數(shù)據(jù)
mSocket.receive(mPacket);
// 實現(xiàn)步驟4:處理數(shù)據(jù)
String response = new String(data, 0, mPacket.getLength());
System.out.println(response);
// 關(guān)閉資源
mSocket.close();
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
更多關(guān)于java相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java Socket編程技巧總結(jié)》、《Java文件與目錄操作技巧匯總》、《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點技巧總結(jié)》和《Java緩存操作技巧匯總》
希望本文所述對大家java程序設(shè)計有所幫助。
相關(guān)文章
Java數(shù)據(jù)庫連接_jdbc-odbc橋連接方式(詳解)
下面小編就為大家?guī)硪黄狫ava數(shù)據(jù)庫連接_jdbc-odbc橋連接方式(詳解)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-08-08
javaweb Servlet開發(fā)總結(jié)(二)
這篇文章主要為大家詳細介紹了javaweb Servlet開發(fā)總結(jié)的第二篇,感興趣的小伙伴們可以參考一下2016-05-05
springmvc的validator數(shù)據(jù)校驗的實現(xiàn)示例代碼
這篇文章主要介紹了springmvc的數(shù)據(jù)校驗的實現(xiàn)示例代碼, 具有一定的參考價值,感興趣的小伙伴們可以參考一下2017-07-07
關(guān)于SpringBoot大文件RestTemplate下載解決方案
這篇文章主要介紹了SpringBoot大文件RestTemplate下載解決方案,最近結(jié)合網(wǎng)上案例及自己總結(jié),寫了一個分片下載tuling/fileServer項目,需要的朋友可以參考下2021-10-10
java實現(xiàn)圖像轉(zhuǎn)碼為字符畫的方法
這篇文章主要為大家詳細介紹了java實現(xiàn)圖像轉(zhuǎn)碼為字符畫的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-03-03
Java?C++算法題解leetcode801使序列遞增的最小交換次數(shù)
這篇文章主要為大家介紹了Java?C++題解leetcode801使序列遞增的最小交換次數(shù)示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-10-10
Spring Boot 整合 Shiro+Thymeleaf過程解析
這篇文章主要介紹了Spring Boot 整合 Shiro+Thymeleaf過程解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-10-10

