Java實(shí)現(xiàn)監(jiān)聽UDP協(xié)議的指定端口并收到數(shù)據(jù)按照十六進(jìn)制輸出方式
場(chǎng)景
對(duì)接協(xié)議中需要監(jiān)聽UDP協(xié)議的指定端口并監(jiān)聽數(shù)據(jù),且數(shù)據(jù)格式為十六進(jìn)制。
如果是在linux服務(wù)上,可以快速通過C或者python腳本等方式實(shí)現(xiàn)。
這里使用Java代碼實(shí)現(xiàn),可便于后續(xù)做其他存儲(chǔ)數(shù)據(jù)等的擴(kuò)展,且只需要在服務(wù)器上安裝jdk,均可進(jìn)行運(yùn)行和數(shù)據(jù)調(diào)試。
實(shí)現(xiàn)
1、新建Java類
import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; public class UdpTest { public static void main(String[] args) { int port = 21000; // 選擇一個(gè)未被使用的端口號(hào) try { // 創(chuàng)建DatagramSocket對(duì)象,并綁定到指定的本地端口 DatagramSocket socket = new DatagramSocket(port); System.out.println("Listening on port: " + socket.getLocalPort()); // 創(chuàng)建一個(gè)DatagramPacket用于接收數(shù)據(jù) byte[] buffer = new byte[1024]; // 接收緩沖區(qū) DatagramPacket packet = new DatagramPacket(buffer, buffer.length); // 循環(huán)監(jiān)聽數(shù)據(jù)包 while (true) { socket.receive(packet); // 接收數(shù)據(jù)包 int length = packet.getLength(); // 獲取實(shí)際接收到的數(shù)據(jù)長(zhǎng)度 byte[] data = new byte[length]; // 創(chuàng)建實(shí)際大小的數(shù)據(jù)副本 System.arraycopy(buffer, 0, data, 0, length); // 輸出十六進(jìn)制數(shù)據(jù) StringBuilder hexOutput = new StringBuilder(); for (byte b : data) { hexOutput.append(String.format("%02X ", b)); } System.out.println(hexOutput); } } catch (IOException e) { e.printStackTrace(); } } }
2、注意不要新增包名
然后在此類的路徑下打開cmd,確保電腦已經(jīng)安裝jdk,進(jìn)行編譯成class文件
輸入如下指令
javac -encoding utf-8 UdpTest.java
因?yàn)檫@里含有中文,所以指定編碼格式
編譯成功后產(chǎn)生class文件
運(yùn)行class文件
java UdpTest
3、使用UDP測(cè)試工具
發(fā)送十六進(jìn)制數(shù)據(jù)并調(diào)試
則后續(xù)將此class文件放到需要調(diào)試數(shù)據(jù)的安裝jdk的服務(wù)器上即可調(diào)試。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
解決復(fù)制springboot項(xiàng)目后,啟動(dòng)日志無顏色的問題
這篇文章主要介紹了解決復(fù)制springboot項(xiàng)目后,啟動(dòng)日志無顏色的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-07-07java微信掃描公眾號(hào)二維碼實(shí)現(xiàn)登陸功能
這篇文章主要為大家詳細(xì)介紹了PHP微信掃描公眾號(hào)二維碼實(shí)現(xiàn)登陸功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07淺談java對(duì)象結(jié)構(gòu) 對(duì)象頭 Markword
這篇文章主要介紹了淺談java對(duì)象結(jié)構(gòu) 對(duì)象頭 Markword,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-10-10Java實(shí)現(xiàn)Excel導(dǎo)出并添加水印
這篇文章主要為大家詳細(xì)介紹了Java如何使用poi-ooxml包導(dǎo)出xlsx添加水印,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-11-11spring boot 日志/頁面處理、實(shí)體類構(gòu)建、后臺(tái)管理功能的實(shí)現(xiàn)
這篇文章主要介紹了spring boot 日志/頁面處理、實(shí)體類構(gòu)建、后臺(tái)管理功能的實(shí)現(xiàn),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-08-08SpringBoot Application注解原理及代碼詳解
這篇文章主要介紹了SpringBoot Application注解原理及代碼詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06Java使用DateFormatter格式化日期時(shí)間的方法示例
這篇文章主要介紹了Java使用DateFormatter格式化日期時(shí)間的方法,結(jié)合具體實(shí)例分析了java使用DateFormatter格式化日期時(shí)間的相關(guān)操作技巧,需要的朋友可以參考下2017-04-04