client netty 主动发数据_netty案例,netty4.1基础入门篇十一《netty udp通信方式案例Demo》...
生活随笔
收集整理的這篇文章主要介紹了
client netty 主动发数据_netty案例,netty4.1基础入门篇十一《netty udp通信方式案例Demo》...
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
小傅哥 | https://bugstack.cn 沉淀、分享、成長,讓自己和他人都能有所收獲。專注于原創(chuàng)專題案例編寫,目前已完成的專題有;Netty4.x實戰(zhàn)專題案例、用Java實現(xiàn)JVM、基于JavaAgent的全鏈路監(jiān)控、手寫RPC框架、架構(gòu)設(shè)計專題案例、源碼分析等。你用劍 、我用刀 ,好的代碼都很燒,望你不吝出招!
一、前言介紹
在Netty通信中UDP的實現(xiàn)方式也非常簡單,只要注意部分代碼區(qū)別于TCP即可。本章節(jié)需要注意的知識點(diǎn) ;NioDatagramChannel、ChannelOption.SO_BROADCAST
Internet 協(xié)議集支持一個無連接的傳輸協(xié)議,該協(xié)議稱為用戶數(shù)據(jù)報協(xié)議(UDP,User Datagram Protocol)。UDP 為應(yīng)用程序提供了一種無需建立連接就可以發(fā)送封裝的 IP 數(shù)據(jù)報的方法。RFC 768 1 描述了 UDP。Internet 的傳輸層有兩個主要協(xié)議,互為補(bǔ)充。無連接的是 UDP,它除了給應(yīng)用程序發(fā)送數(shù)據(jù)包功能并允許它們在所需的層次上架構(gòu)自己的協(xié)議之外,幾乎沒有做什么特別的的事情。面向連接的是 TCP,該協(xié)議幾乎做了所有的事情。
二、環(huán)境準(zhǔn)備
1、jdk1.8【jdk1.7以下只能部分支持netty】
2、Netty4.1.36.Final【netty3.x 4.x 5每次的變化較大,接口類名也隨著變化】
3、NetAssist 網(wǎng)絡(luò)調(diào)試助手,可以從網(wǎng)上下載也可以聯(lián)系我,微信公眾號:bugstack蟲洞棧 | 關(guān)注回復(fù)你的郵箱
三、代碼示例
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.javaclient/MyChannelInitializer.java/*** 蟲洞棧:https://bugstack.cn* 公眾號:bugstack蟲洞棧 {獲取學(xué)習(xí)源碼}* 蟲洞群:①群5398358 ②群5360692* Create by fuzhengwei on @2019*/ public class MyChannelInitializer extends ChannelInitializer<NioDatagramChannel> {@Overrideprotected void initChannel(NioDatagramChannel ch) throws Exception {ChannelPipeline pipeline = ch.pipeline();// 解碼轉(zhuǎn)String,注意調(diào)整自己的編碼格式GBK、UTF-8//pipeline.addLast("stringDecoder", new StringDecoder(Charset.forName("GBK")));pipeline.addLast(new MyClientHandler());}}client/MyClientHandler.java/*** 蟲洞棧:https://bugstack.cn* 公眾號:bugstack蟲洞棧 {獲取學(xué)習(xí)源碼}* 蟲洞群:①群5398358 ②群5360692* Create by fuzhengwei on @2019*/ public class MyClientHandler extends SimpleChannelInboundHandler<DatagramPacket> {//接受服務(wù)端發(fā)送的內(nèi)容@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蟲洞棧 {獲取學(xué)習(xí)源碼}* 蟲洞群:①群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();//向目標(biāo)端口發(fā)送信息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蟲洞棧 {獲取學(xué)習(xí)源碼}* 蟲洞群:①群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();// 解碼轉(zhuǎn)String,注意調(diào)整自己的編碼格式GBK、UTF-8//pipeline.addLast("stringDecoder", new StringDecoder(Charset.forName("GBK")));pipeline.addLast(group, new MyServerHandler());}}server/MyServerHandler.java/*** 蟲洞棧:https://bugstack.cn* 公眾號:bugstack蟲洞棧 {獲取學(xué)習(xí)源碼}* 蟲洞群:①群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服務(wù)端接收到消息:" + msg);//向客戶端發(fā)送消息String json = "微信公眾號:bugstack蟲洞棧,通知:我已經(jīng)收到你的消息rn";// 由于數(shù)據(jù)報的數(shù)據(jù)是以字符數(shù)組傳的形式存儲的,所以傳轉(zhuǎn)數(shù)據(jù)byte[] bytes = json.getBytes(Charset.forName("GBK"));DatagramPacket data = new DatagramPacket(Unpooled.copiedBuffer(bytes), packet.sender());ctx.writeAndFlush(data);//向客戶端發(fā)送消息}}server/NettyServer.java/*** 蟲洞棧:https://bugstack.cn* 公眾號:bugstack蟲洞棧 {獲取學(xué)習(xí)源碼}* 蟲洞群:①群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)// 設(shè)置UDP讀緩沖區(qū)為2M.option(ChannelOption.SO_SNDBUF, 1024 * 1024)// 設(shè)置UDP寫緩沖區(qū)為1M.handler(new MyChannelInitializer());ChannelFuture f = b.bind(7397).sync();System.out.println("itstack-demo-netty udp server start done. {關(guān)注公眾號:bugstack蟲洞棧,獲取源碼}");f.channel().closeFuture().sync();} finally {//優(yōu)雅的關(guān)閉釋放內(nèi)存group.shutdownGracefully();}}}四、測試結(jié)果
啟動NettyServeritstack-demo-netty udp server start done. {關(guān)注公眾號:bugstack蟲洞棧,獲取源碼} 2019-09-01 16:58:34 UDP服務(wù)端接收到消息:你好端口7397的bugstack蟲洞棧,我是客戶端小愛,你在嗎! 2019-09-01 16:59:15 UDP服務(wù)端接收到消息:你好,有人在關(guān)注bugstack公眾號,關(guān)注可以獲得源碼! 2019-09-01 16:59:15 UDP服務(wù)端接收到消息:你好,有人在關(guān)注bugstack公眾號,關(guān)注可以獲得源碼! 2019-09-01 16:59:16 UDP服務(wù)端接收到消息:你好,有人在關(guān)注bugstack公眾號,關(guān)注可以獲得源碼! 2019-09-01 16:59:17 UDP服務(wù)端接收到消息:你好,有人在關(guān)注bugstack公眾號,關(guān)注可以獲得源碼! 2019-09-01 16:59:17 UDP服務(wù)端接收到消息:你好,有人在關(guān)注bugstack公眾號,關(guān)注可以獲得源碼! 2019-09-01 16:59:18 UDP服務(wù)端接收到消息:你好,有人在關(guān)注bugstack公眾號,關(guān)注可以獲得源碼! 2019-09-01 16:59:18 UDP服務(wù)端接收到消息:你好,有人在關(guān)注bugstack公眾號,關(guān)注可以獲得源碼! 2019-09-01 16:59:19 UDP服務(wù)端接收到消息:你好,有人在關(guān)注bugstack公眾號,關(guān)注可以獲得源碼! 2019-09-01 16:59:19 UDP服務(wù)端接收到消息:你好,有人在關(guān)注bugstack公眾號,關(guān)注可以獲得源碼!Process finished with exit code -1啟動NettyClient2019-09-01 16:58:34 UDP客戶端接收到消息:微信公眾號:bugstack蟲洞棧,通知:我已經(jīng)收到你的消息Process finished with exit code -1在啟動一個網(wǎng)絡(luò)調(diào)試助手,NetAssist | 這樣方便我們驗證總結(jié)
以上是生活随笔為你收集整理的client netty 主动发数据_netty案例,netty4.1基础入门篇十一《netty udp通信方式案例Demo》...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Java RandomAccessFil
- 下一篇: 获取列表中包含的元素数 在C#中