client netty 主動發數據_netty案例,netty4.1基礎入門篇十一《netty udp通信方式案例Demo》...

小傅哥 | https://bugstack.cn 沉淀、分享、成長,讓自己和他人都能有所收獲。專注于原創專題案例編寫,目前已完成的專題有;Netty4.x實戰專題案例、用Java實現JVM、基于JavaAgent的全鏈路監控、手寫RPC框架、架構設計專題案例、源碼分析等。你用劍 、我用刀 ,好的代碼都很燒,望你不吝出招!

一、前言介紹

在Netty通信中UDP的實現方式也非常簡單,只要注意部分代碼區別于TCP即可。本章節需要注意的知識點 ;NioDatagramChannel、ChannelOption.SO_BROADCAST

Internet 協議集支持一個無連接的傳輸協議,該協議稱為用戶數據報協議(UDP,User Datagram Protocol)。UDP 為應用程序提供了一種無需建立連接就可以發送封裝的 IP 數據報的方法。RFC 768 1 描述了 UDP。

Internet 的傳輸層有兩個主要協議,互為補充。無連接的是 UDP,它除了給應用程序發送數據包功能并允許它們在所需的層次上架構自己的協議之外,幾乎沒有做什么特別的的事情。面向連接的是 TCP,該協議幾乎做了所有的事情。

二、環境準備

1、jdk1.8【jdk1.7以下只能部分支持netty】

2、Netty4.1.36.Final【netty3.x 4.x 5每次的變化較大,接口類名也隨著變化】

3、NetAssist 網絡調試助手,可以從網上下載也可以聯系我,微信公眾號:bugstack蟲洞棧 | 關注回復你的郵箱

三、代碼示例

itstack-demo-netty-1-11
└── src├── main│   └── java│       └── org.itstack.demo.netty│           ├── client│           │   ├── MyChannelInitializer.java│           │   ├── MyClientHandler.java│           │   └── NettyClient.java│           └── server│               ├── MyChannelInitializer.java│               ├── MyServerHandler.java│               └── NettyServer.java└── test└── java└── org.itstack.demo.netty.test└── ApiTest.java
client/MyChannelInitializer.java
/*** 蟲洞棧:https://bugstack.cn* 公眾號:bugstack蟲洞棧  {獲取學習源碼}* 蟲洞群:①群5398358 ②群5360692* Create by fuzhengwei on @2019*/
public class MyChannelInitializer extends ChannelInitializer<NioDatagramChannel> {@Overrideprotected void initChannel(NioDatagramChannel ch) throws Exception {ChannelPipeline pipeline = ch.pipeline();// 解碼轉String,注意調整自己的編碼格式GBK、UTF-8//pipeline.addLast("stringDecoder", new StringDecoder(Charset.forName("GBK")));pipeline.addLast(new MyClientHandler());}}
client/MyClientHandler.java
/*** 蟲洞棧:https://bugstack.cn* 公眾號:bugstack蟲洞棧  {獲取學習源碼}* 蟲洞群:①群5398358 ②群5360692* Create by fuzhengwei on @2019*/
public class MyClientHandler extends SimpleChannelInboundHandler<DatagramPacket> {//接受服務端發送的內容@Overrideprotected void channelRead0(ChannelHandlerContext ctx, DatagramPacket packet) throws Exception {String msg = packet.content().toString(Charset.forName("GBK"));System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) + " UDP客戶端接收到消息:" + msg);}}
client/NettyClient.java
/*** 蟲洞棧:https://bugstack.cn* 公眾號:bugstack蟲洞棧  {獲取學習源碼}* 蟲洞群:①群5398358 ②群5360692* Create by fuzhengwei on @2019*/
public class NettyClient {public static void main(String[] args) {EventLoopGroup group = new NioEventLoopGroup();try {Bootstrap b = new Bootstrap();b.group(group).channel(NioDatagramChannel.class).handler(new MyChannelInitializer());Channel ch = b.bind(7398).sync().channel();//向目標端口發送信息ch.writeAndFlush(new DatagramPacket(Unpooled.copiedBuffer("你好端口7397的bugstack蟲洞棧,我是客戶端小愛,你在嗎!", Charset.forName("GBK")),new InetSocketAddress("127.0.0.1", 7397))).sync();ch.closeFuture().await();} catch (Exception e) {e.printStackTrace();} finally {group.shutdownGracefully();}}}
server/MyChannelInitializer.java
/*** 蟲洞棧:https://bugstack.cn* 公眾號:bugstack蟲洞棧  {獲取學習源碼}* 蟲洞群:①群5398358 ②群5360692* Create by fuzhengwei on @2019*/
public class MyChannelInitializer extends ChannelInitializer<NioDatagramChannel> {private EventLoopGroup group = new NioEventLoopGroup();@Overrideprotected void initChannel(NioDatagramChannel ch) throws Exception {ChannelPipeline pipeline = ch.pipeline();// 解碼轉String,注意調整自己的編碼格式GBK、UTF-8//pipeline.addLast("stringDecoder", new StringDecoder(Charset.forName("GBK")));pipeline.addLast(group, new MyServerHandler());}}
server/MyServerHandler.java
/*** 蟲洞棧:https://bugstack.cn* 公眾號:bugstack蟲洞棧  {獲取學習源碼}* 蟲洞群:①群5398358 ②群5360692* Create by fuzhengwei on @2019*/
public class MyServerHandler extends SimpleChannelInboundHandler<DatagramPacket> {@Overrideprotected void channelRead0(ChannelHandlerContext ctx, DatagramPacket packet) throws Exception {String msg = packet.content().toString(Charset.forName("GBK"));System.out.println(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date()) + " UDP服務端接收到消息:" + msg);//向客戶端發送消息String json = "微信公眾號:bugstack蟲洞棧,通知:我已經收到你的消息rn";// 由于數據報的數據是以字符數組傳的形式存儲的,所以傳轉數據byte[] bytes = json.getBytes(Charset.forName("GBK"));DatagramPacket data = new DatagramPacket(Unpooled.copiedBuffer(bytes), packet.sender());ctx.writeAndFlush(data);//向客戶端發送消息}}
server/NettyServer.java
/*** 蟲洞棧:https://bugstack.cn* 公眾號:bugstack蟲洞棧  {獲取學習源碼}* 蟲洞群:①群5398358 ②群5360692* Create by fuzhengwei on @2019*/
public class NettyServer {public static void main(String[] args) throws InterruptedException {EventLoopGroup group = new NioEventLoopGroup();try {Bootstrap b = new Bootstrap();b.group(group).channel(NioDatagramChannel.class).option(ChannelOption.SO_BROADCAST, true)    //廣播.option(ChannelOption.SO_RCVBUF, 2048 * 1024)// 設置UDP讀緩沖區為2M.option(ChannelOption.SO_SNDBUF, 1024 * 1024)// 設置UDP寫緩沖區為1M.handler(new MyChannelInitializer());ChannelFuture f = b.bind(7397).sync();System.out.println("itstack-demo-netty udp server start done. {關注公眾號:bugstack蟲洞棧,獲取源碼}");f.channel().closeFuture().sync();} finally {//優雅的關閉釋放內存group.shutdownGracefully();}}}

四、測試結果

啟動NettyServer
itstack-demo-netty udp server start done. {關注公眾號:bugstack蟲洞棧,獲取源碼}
2019-09-01 16:58:34 UDP服務端接收到消息:你好端口7397的bugstack蟲洞棧,我是客戶端小愛,你在嗎!
2019-09-01 16:59:15 UDP服務端接收到消息:你好,有人在關注bugstack公眾號,關注可以獲得源碼!
2019-09-01 16:59:15 UDP服務端接收到消息:你好,有人在關注bugstack公眾號,關注可以獲得源碼!
2019-09-01 16:59:16 UDP服務端接收到消息:你好,有人在關注bugstack公眾號,關注可以獲得源碼!
2019-09-01 16:59:17 UDP服務端接收到消息:你好,有人在關注bugstack公眾號,關注可以獲得源碼!
2019-09-01 16:59:17 UDP服務端接收到消息:你好,有人在關注bugstack公眾號,關注可以獲得源碼!
2019-09-01 16:59:18 UDP服務端接收到消息:你好,有人在關注bugstack公眾號,關注可以獲得源碼!
2019-09-01 16:59:18 UDP服務端接收到消息:你好,有人在關注bugstack公眾號,關注可以獲得源碼!
2019-09-01 16:59:19 UDP服務端接收到消息:你好,有人在關注bugstack公眾號,關注可以獲得源碼!
2019-09-01 16:59:19 UDP服務端接收到消息:你好,有人在關注bugstack公眾號,關注可以獲得源碼!Process finished with exit code -1
啟動NettyClient
2019-09-01 16:58:34 UDP客戶端接收到消息:微信公眾號:bugstack蟲洞棧,通知:我已經收到你的消息Process finished with exit code -1
在啟動一個網絡調試助手,NetAssist | 這樣方便我們驗證

c125e36549be03d233151ae48b31450f.png

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/541186.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/541186.shtml
英文地址,請注明出處:http://en.pswp.cn/news/541186.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

服務器硬件oid,HPE ProLiant DL580 Gen10 服務器

用可擴展 4U 外形提供可擴展性能HPE ProLiant DL580 Gen10 服務器支持多達四個英特爾至強鉑金和金牌處理器&#xff0c;與上一代英特爾 至強 可擴展處理器相比&#xff0c;每個內核的性能提升高達 11%[5]&#xff0c;可借助 4U 可擴展機箱&#xff0c;實現 4P 計算能力。多達 4…

php-對銀行卡號做掩碼處理

1.實現代碼如下/*** 對銀行卡號進行掩碼處理* param string $bankCardNo 銀行卡號* return string 掩碼后的銀行卡號*/function formatBankCardNo($bankCardNo){//截取銀行卡號前4位$prefix substr($bankCardNo,0,4);//截取銀行卡號后4位$suffix substr($bankCa…

最長遞增子序列 子串_最長遞增奇偶子序列

最長遞增子序列 子串Problem statement: 問題陳述&#xff1a; Given a sequence of numbers you have to find out the length of the longest increasing odd even subsequence and print the length of the subsequence. The sequence will be maintaining like, (odd ) -&…

echarts 柱狀圖不顯示y坐標軸_Python+matplotlib自定義坐標軸位置、顏色、箭頭

圖書推薦&#xff1a;《Python程序設計基礎與應用》(ISBN&#xff1a;9787111606178)&#xff0c;董付國&#xff0c;機械工業出版社圖書詳情&#xff1a;用書教師可以聯系董老師獲取教學大綱、課件、源碼、教案、考試系統等配套教學資源。使用Pythonnumpymatplotlib這樣的組合…

css3瀏覽,css3支持哪些瀏覽器?

CSS3 帶來眾多全新的設計體驗&#xff0c;但有一個問題值得考慮&#xff1a;瀏覽器對 CSS3 特性的兼容情況如何&#xff1f;因為頁面最終離不開用瀏覽器來渲染&#xff0c;并不是所有瀏覽器都完全支持 CSS3 的特性。有時花時間寫的效果只能在特定的瀏覽器下有效&#xff0c;這意…

print函數python_帶有結束參數的Python print()函數

print函數pythonprint()函數 (print() function) print() function is used to print message on the screen. print()函數用于在屏幕上打印消息。 Example: 例&#xff1a; # python print() function example# printing textprint("Hello world!")print("He…

python各位數字之和為5的數_『Python基礎-5』數字,運算,轉換

『Python基礎-5』數字,運算,轉換目錄基本的數字類型二進制,八進制,十六進制數字類型間的轉換數字運算1. 數字類型Python 數字數據類型用于存儲數學上的值&#xff0c;比如整數、浮點數、復數等。數字類型在python中是不可變類型&#xff0c;意思是一個變量被賦予了一個不一樣的…

移動游戲加載性能和內存管理全解析 學習

https://v.qq.com/iframe/player.html?vido0512etq2vm&tiny0&auto0 轉載于:https://www.cnblogs.com/revoid/p/7039232.html

css 軌道,html-當其他軌道增加時,CSS網格的軌道不會縮...

由于行和列定義中都包含1fr,因此水平和垂直空間受到限制-因此網格項目將平均共享它們.嘗試將其更改為自動用于行和列,您可以看到一切正常,但還不完美-請注意,懸停的網格項周圍存在空格&#xff1a;.grid--container {height: 100vh;width: 100vw;max-height: 100%;max-width: 1…

帶有示例的Python File readline()方法

文件readline()方法 (File readline() Method) readline() method is an inbuilt method in Python, it is used to get one line from the file, the method is called with this object (current file stream/IO object) and returns one line from the file, we can also sp…

++代碼實現 模糊綜合算法_干貨 | 十大經典排序算法最強總結(內含代碼實現)...

一、算法分類十種常見排序算法可以分為兩大類&#xff1a;比較類排序&#xff1a;通過比較來決定元素間的相對次序&#xff0c;由于其時間復雜度不能突破O(nlogn)&#xff0c;因此也稱為非線性時間比較類排序。非比較類排序&#xff1a;不通過比較來決定元素間的相對次序&#…

如何恢復osd的auth表中的權限

2019獨角獸企業重金招聘Python工程師標準>>> 原因&#xff1a;當你一不小心刪掉了osd的auth信息時&#xff0c;重啟osd服務&#xff0c;此時ceph -s查看發現osd down 如&#xff1a; [rootceph ~]# ceph osd tree ID WEIGHT TYPE NAME UP/DOWN REWEIGHT PRIM…

nginx服務器配置安全維護,Nginx服務器相關的一些安全配置建議

這篇文章主要介紹了Nginx服務器相關的一些安全配置建議,共計總結了十個小點,需要的朋友可以參考下Nginx是當今最流行的Web服務器之一。它為世界上7%的web流量提供服務而且正在以驚人的速度增長。它是個讓人驚奇的服務器&#xff0c;我愿意部署它。下面是一個常見安全陷阱和解決…

帶有示例的Python date strftime()方法

Python date.strftime()方法 (Python date.strftime() Method) date.strftime() method is used to manipulate objects of date class of module datetime. date.strftime()方法用于操作模塊datetime的日期類的對象。 It takes an instance of the class and returns a stri…

python 發送郵件connect none_使用python向IP地址發送郵件

所以我嘗試通過python腳本發送郵件。使用通常的接收者地址格式可以正常工作”userdomain.tld". 當我現在嘗試使用帶有接收者“user[IP Address]的腳本時&#xff0c;我所有的調試輸出看起來都很好&#xff0c;sendmail方法也可以工作&#xff0c;但是郵件始終沒有收到。我…

老男孩IT教育38期面授班 學員邢偉的決心書

大家好我叫邢偉,今年22歲&#xff0c;上一份工作是做媒體推廣的&#xff0c;拿完獎金飯補全勤獎月薪大概4K左右&#xff0c;在北京生活感覺力不從心現在參加老男孩IT教育linux運維38期&#xff0c;在接下來的學習中&#xff0c;我的目標是畢業后達到月薪12K在接下來的學習中早上…

PS打開PSD文檔服務器未響應,ps打不開psd文件的解決方法

很多人用ps做作品的時候&#xff0c;經常遇到psd文件打不開的問題&#xff0c;最常見的有三種原因&#xff0c;有兩種可以設置解決&#xff0c;另一種是文件損壞&#xff0c;不可恢復。下面是學習小編給大家整理的有關介紹ps打不開psd文件的解決方法&#xff0c;希望對大家有幫…

strictmath_Java StrictMath cbrt()方法與示例

strictmathStrictMath類cbrt()方法 (StrictMath Class cbrt() method) cbrt() method is available in java.lang package. cbrt()方法在java.lang包中可用。 cbrt() method is used to find the cube root of the given parameter in the method. Here, cbrt stands for cube …

模塊---常用模塊

import osprint(os.getcwd()) #得到當前目錄#os.chmod("/usr/local",7) #給文件或者文件夾加權限&#xff0c;7為最高權限print(os.chdir("../")) #更改當前目錄print(os.curdir) #當前目錄print(os.pardir) #父目錄print(os.mkdir("test1")) #創…

excel添加列下拉框票價_excel表格下拉表格添加數據-excel2017表格中怎么制作下拉菜單列表框...

在Excel表中&#xff0c;如何將增加下拉菜單的選項&#xff1f;excel中的下拉菜單選項&#xff0c;就是篩選的功能&#xff0c;具體操作如下&#xff1a;1.首先選中a、b兩列數據&#xff0c;在“開始”選項卡上選擇“篩選”&#xff1b;2.這樣就在excel表中添加了下拉菜單選項。…